Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改asp.net应用程序的时区_C#_Asp.net_Datetime - Fatal编程技术网

C# 如何更改asp.net应用程序的时区

C# 如何更改asp.net应用程序的时区,c#,asp.net,datetime,C#,Asp.net,Datetime,我需要将ASP.NET的默认时区设置为Asia/Dhaka或GMT+6时区。但我找不到一种方法在全球范围内改变它。关于Stackoverflow和web的其他部分有很多参考资料,可以通过获取时区信息和计算每次需要DateTime对象的正确时间来实现这一点 但是相信我,我不想这样做。所以不要给我这样的建议。我想将时区设置为Asia/Dhaka或GMT+6,最好是从web.config。(类似于我们在php和php.ini中所做的)这样,每次我需要DateTime对象时,时间都用我的时区计算,无论服

我需要将ASP.NET的默认时区设置为Asia/Dhaka或GMT+6时区。但我找不到一种方法在全球范围内改变它。关于Stackoverflow和web的其他部分有很多参考资料,可以通过获取时区信息和计算每次需要DateTime对象的正确时间来实现这一点

但是相信我,我不想这样做。所以不要给我这样的建议。我想将时区设置为Asia/Dhaka或GMT+6,最好是从web.config。(类似于我们在php和php.ini中所做的)这样,每次我需要DateTime对象时,时间都用我的时区计算,无论服务器的时区是什么

这可能吗?如果可能的话,怎么办??
提前感谢您提供的解决方案:)

很抱歉,在.NET中无法全局更改时区

唯一的方法是更改服务器的时区或重写所有代码

最佳实践是完全不依赖系统时区(永远不要使用DateTime.Now)

您应该将所有日期处理为Utc日期,然后在向用户显示时将其转换为特定区域


即使您设法在ASP.NET应用程序中处理时区,SQL Server上仍然存在时区,例如GETTIME Function。如果您的应用程序完全是用UTC编写的,那么SQL server功能也可以工作。

您可以更改时区…并获取日期

 DateTime utcTime = DateTime.UtcNow;
    TimeZoneInfo myZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
    DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone);
    Str.Append(custDateTime.ToString());

我对说明有问题:

TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
所以。。。我创建了一个个人时区信息

这是我的代码

public static DateTime DateNow()
        {
            DateTime utcTime = DateTime.UtcNow;
            TimeZoneInfo myZone = TimeZoneInfo.CreateCustomTimeZone("COLOMBIA", new TimeSpan(-5, 0, 0), "Colombia", "Colombia");
            DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone);
            return custDateTime;   
        }

有一个非常简单的方法。只需在两个不同的变量中获取当前UTC时间和时区。然后将UTC转换为第三个变量中的时区,并在任何地方使用它。这是你怎么做的

DateTime date1 = DateTime.UtcNow;

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Pakistan Standard Time");

DateTime date2 = TimeZoneInfo.ConvertTime(date1, tz);
在tz中设置时区,然后在任何地方使用“date2”。

有一个类似的问题(关于时区),我最终将一些数据库类型从
DateTime
更改为
DateTimeOffset
(MSSql)

写了一个扩展名

public static class Extensions
{
    public static DateTimeOffset ToCentralTime(this DateTimeOffset value)
    {
        return TimeZoneInfo.ConvertTime(value, TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"));
    }
}
使用示例:

public class ClockPunch
{
    private DateTimeOffset dtoTimeIn;
    private DateTimeOffset? dtoTimeOut;
    public ClockPunch() { }
    public DateTimeOffset TimeIn
    {
        get { return dtoTimeIn.ToCentralTime(); }
        set { dtoTimeIn = value; }
    }
    public DateTimeOffset? TimeOut
    {
        get
        {
            DateTimeOffset? retVal = null;
            if (dtoTimeOut != null)
            {
                retVal = ((DateTimeOffset)dtoTimeOut).ToCentralTime();
            }
            return retVal;
        }
        set { dtoTimeOut = value; }
    }
}

最好是创建一个
自定义时区

        public static DateTime DateNow()
        {
            DateTime utcTime = DateTime.UtcNow;
            TimeZoneInfo myZone = TimeZoneInfo.CreateCustomTimeZone("INDIA", new TimeSpan(+5, +30, 0), "India", "India");
            DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone);
            return custDateTime;
        }

你为什么不想把事情做好?请记住,
DateTime
没有固有的时区。(在某些方面,这是一种非常奇怪的类型。)您通常(但并非总是)应该将所有内容都保留在UTC中,而不是发送给用户或从用户发送的时间-为什么不希望遵循这种常见模式?问题是我有许多datetime对象超过100个aspx页面,并且需要在本地时区中呈现它们。我并不反对每次都使用UTC。但是我需要一个在aspx页面中以本地时区呈现时间而不更改所有页面的解决方案。听起来您真正需要的是在一个中心位置放置
DateTime
呈现代码,然后在需要呈现
DateTime
的任何地方调用该代码。您可能需要一次性更改所有100页,但如果要进一步更改所需日期/时间的呈现方式,只需在一个地方进行更改。@JonSkeet,我在一家公司工作,该公司有20名开发人员和10个不同的c#项目。如果有一种方法可以简单地更改app/web.config中的配置设置并设置日期时间。现在考虑定义的时区,这将为每个人节省大量时间和错误,不是吗?(而不是试图让每个人都使用DateTime.UtcNow)*这是安装在远程计算机上的WPF客户端应用程序,由于客户端连接问题,我们需要记录本地时间(无法将其传递到数据库,然后才记录日期时间。现在)@UriAbramson:不,我认为这不是更好的解决方案。基本上,这是对使用错误API的开发人员的一种惩罚<代码>日期时间。现在执行它所说的操作-返回系统本地时间。如果您试图指定不同的时区,那么这不是您想要的行为,因此您不应该使用该属性。全球化设置不会更改DateTime对象的工作方式,因为大多数国家都有许多时区,因此它不知道使用哪个时区。谢谢您的建议,看起来它会根据文化区域更改格式。但不是时间偏移。我同意以utc格式处理所有日期,但每次显示时需要一种转换方式。在我的应用程序中,我已经有数百个DateTime对象。我正在寻找一种方法,而不是搜索所有这些并用util方法逐个替换它们:s:我一直在为我的应用程序寻找相同的解决方案。几乎同样的问题也被问到了。又一次否决票??请解释为什么我可以改进我的回答,我是@giammin。不要在没有解释的情况下否决投票。TimezoneInfo就是我要找的!