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

u59ebvdq  于 2023-03-04  发布在  .NET
关注(0)|答案(6)|浏览(247)

我需要为我的ASP.NET设置默认时区为亚洲/达卡或GMT+6时区。但我找不到全局更改它的方法。Stackoverflow和其他Web上有很多参考,可以通过获取时区信息并计算每次我需要DateTime对象时的正确时间来做到这一点。
但是请相信我,我不想用这种方式来做,所以不要给予我任何类似的建议,我想把时区设置为亚洲/达卡或GMT+6,最好是从web. config.(类似于我们在php和php.ini中所做的),以便每次我需要DateTime对象时,无论服务器的时区是什么,时间都是用我的时区来计算的。
这可能吗?如果可能,那么怎么做??提前感谢您的解决方案:)

eqqqjvef

eqqqjvef1#

抱歉,在.NET中无法全局更改时区。
唯一的方法是更改服务器的时区或重写所有代码。
最佳做法是完全不依赖系统时区(永远不要使用DateTime.Now)。
您应该将所有日期处理为Utc日期,然后在向用户显示它们时转换为特定区域。
即使您设法在ASP.NET应用程序中处理时区,SQL Server上仍然存在时区,例如GETTIME函数。如果您的应用程序完全用UTC编写,SQL Server函数也可以正常工作。

i7uaboj4

i7uaboj42#

有一个非常简单的方法来做到这一点。简单地得到当前的UTC时间和您的时区在两个不同的变量。然后转换UTC到您的时区在第三个变量和使用它在任何地方。这里是你怎么做的。

DateTime date1 = DateTime.UtcNow;

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

DateTime date2 = TimeZoneInfo.ConvertTime(date1, tz);

将时区设置为tz,然后在任何地方使用“date2”。

ohfgkhjo

ohfgkhjo3#

我对说明书有疑问:

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;   
        }
lhcgjxsq

lhcgjxsq4#

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

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

jaxagkaj5#

更好的方法是创建一个customTimeZone

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;
        }
83qze16e

83qze16e6#

有一个类似的问题(时区),我结束了改变一些数据库类型从DateTimeDateTimeOffset(SQL Server)。
DateTimeOffset Struct
我为此写了一个扩展:

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; }
    }
}

相关问题