C# 如何更改asp.net应用程序的时区
我需要将ASP.NET的默认时区设置为Asia/Dhaka或GMT+6时区。但我找不到一种方法在全球范围内改变它。关于Stackoverflow和web的其他部分有很多参考资料,可以通过获取时区信息和计算每次需要DateTime对象的正确时间来实现这一点 但是相信我,我不想这样做。所以不要给我这样的建议。我想将时区设置为Asia/Dhaka或GMT+6,最好是从web.config。(类似于我们在php和php.ini中所做的)这样,每次我需要DateTime对象时,时间都用我的时区计算,无论服务器的时区是什么 这可能吗?如果可能的话,怎么办??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对象时,时间都用我的时区计算,无论服
提前感谢您提供的解决方案:)很抱歉,在.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就是我要找的!