我需要将ASP.NET的默认时区设置为亚洲/达卡或GMT + 6时区。但我找不到全球改变它的方法。 Stackoverflow和Web的其余部分有很多参考,通过获取时区信息并计算每次需要DateTime对象的正确时间。
但请相信我,我不想这样做。所以不要给我这样的建议。我想将时区设置为亚洲/达卡或GMT + 6,最好是从web.config。 (类似我们在php中使用php.ini)所以每次我需要DateTime对象时,无论服务器的时区是什么,时间都用我的时区进行评估。
这可能吗?如果可能的话怎么样? 在此先感谢您的解决方案:)
答案 0 :(得分:9)
很抱歉,.NET无法全局更改时区。
唯一的方法是更改服务器的时区或重写所有代码。
最佳做法是完全不依赖系统时区(永远不要使用DateTime.Now)。
您应该将所有日期作为Utc日期处理,然后在向用户显示时转换为特定区域。
即使您设法在ASP.NET应用程序中处理时区,SQL Server上仍然存在时区,例如GETTIME功能。如果您的应用程序完全用UTC编写,那么您的SQL服务器功能也可以正常工作。
答案 1 :(得分:3)
您可以更改TimeZone ...并获取日期
DateTime utcTime = DateTime.UtcNow;
TimeZoneInfo myZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone);
Str.Append(custDateTime.ToString());
答案 2 :(得分:3)
有一个很简单的方法来做到这一点。只需获取当前UTC时间和您的时区即可。将UTC转换为您的时区。这是您的操作方式。
DateTime date1 = DateTime.UtcNow;
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Pakistan Standard Time");
DateTime date2 = TimeZoneInfo.ConvertTime(date1, tz);
以tz为单位设置时区,然后在任何地方使用“ date2”。
答案 3 :(得分:2)
我的说明有问题:
TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
所以...我创建了一个个人的TimeZoneInfo。
这是我的代码......
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;
}
答案 4 :(得分:0)
遇到类似的问题(带有时区),我最终将某些数据库类型从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; }
}
}
答案 5 :(得分:0)
最好是创建一个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;
}