我有一个ASP.NET
MVC
个应用未正确转换日期值。我住在一个时区。我的用户居住在另一个用户。这时,假设我有以下字符串:
var date = "7/1/2014 4:00:00 AM +00:00";
我正在使用以下内容将此字符串转换为DateTime:
DateTime temp;
if (DateTime.TryParse(date, out temp))
{
temp = temp.ToShortDateString();
WriteToLog(temp);
}
当temp被写入日志文件时,我发现它被写为6/30/2014
。什么可能导致这个?我期待7/1/2014
。它适用于我的机器。但是,它无法在我的用户计算机上运行。
答案 0 :(得分:4)
答案是时区。您正在解析特定时间点(格林尼治标准时间凌晨4点)。这与前一天中部标准时间下午10点的时间相同。
如果你保留UTC:
var s = temp.ToUniversalTime().ToShortDateString();
您将获得所请求的输出。
答案 1 :(得分:1)
string date = "7/1/2014 4:00:00 AM +00:00";
DateTime temp;
if (DateTime.TryParse(date, CultureInfo.InstalledUICulture,
DateTimeStyles.AdjustToUniversal, out temp))
{
string result = temp.ToShortDateString());
}
答案 2 :(得分:0)
默认情况下,代码将使用服务器的本地时间,以下是我在在线网站中使用DateTime
的方式:
将其转换为UTC:
var mydate = DateTime.UtcNow;
// Or
var mydate2 = (new DateTime(2015, 6, 3)).ToUniversalTime();
这将使您的应用与时区无关。
将其转换为所需时区:
使用TimeZoneInfo类将本地时间转换为另一个备用时区
var mydate = DateTime.UtcNow;
TimeZoneInfo iranTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Iran Standard Time");
var tehranDateTime = TimeZoneInfo.ConvertTime(mydate, iranTimeZoneInfo);
此代码将始终在任何具有正确日期时间和时间的计算机上返回德黑兰当地时间。时区配置。
此处列出了您可以使用的有效TimeZone ID:
- Dateline Standard Time
- UTC-11
- Hawaiian Standard Time
- Alaskan Standard Time
- Pacific Standard Time (Mexico)
- Pacific Standard Time
- US Mountain Standard Time
- Mountain Standard Time (Mexico)
- Mountain Standard Time
- Central America Standard Time
- Central Standard Time
- Central Standard Time (Mexico)
- Canada Central Standard Time
- SA Pacific Standard Time
- Eastern Standard Time
- US Eastern Standard Time
- Venezuela Standard Time
- Paraguay Standard Time
- Atlantic Standard Time
- Central Brazilian Standard Time
- SA Western Standard Time
- Pacific SA Standard Time
- Newfoundland Standard Time
- E. South America Standard Time
- Argentina Standard Time
- SA Eastern Standard Time
- Greenland Standard Time
- Montevideo Standard Time
- Bahia Standard Time
- UTC-02
- Mid-Atlantic Standard Time
- Azores Standard Time
- Cape Verde Standard Time
- Morocco Standard Time
- UTC
- GMT Standard Time
- Greenwich Standard Time
- W. Europe Standard Time
- Central Europe Standard Time
- Romance Standard Time
- Central European Standard Time
- W. Central Africa Standard Time
- Namibia Standard Time
- Jordan Standard Time
- GTB Standard Time
- Middle East Standard Time
- Egypt Standard Time
- Syria Standard Time
- E. Europe Standard Time
- South Africa Standard Time
- FLE Standard Time
- Turkey Standard Time
- Israel Standard Time
- Kaliningrad Standard Time
- Libya Standard Time
- Arabic Standard Time
- Arab Standard Time
- Belarus Standard Time
- Russian Standard Time
- E. Africa Standard Time
- Iran Standard Time
- Arabian Standard Time
- Azerbaijan Standard Time
- Russia Time Zone 3
- Mauritius Standard Time
- Georgian Standard Time
- Caucasus Standard Time
- Afghanistan Standard Time
- West Asia Standard Time
- Ekaterinburg Standard Time
- Pakistan Standard Time
- India Standard Time
- Sri Lanka Standard Time
- Nepal Standard Time
- Central Asia Standard Time
- Bangladesh Standard Time
- N. Central Asia Standard Time
- Myanmar Standard Time
- SE Asia Standard Time
- North Asia Standard Time
- China Standard Time
- North Asia East Standard Time
- Singapore Standard Time
- W. Australia Standard Time
- Taipei Standard Time
- Ulaanbaatar Standard Time
- Tokyo Standard Time
- Korea Standard Time
- Yakutsk Standard Time
- Cen. Australia Standard Time
- AUS Central Standard Time
- E. Australia Standard Time
- AUS Eastern Standard Time
- West Pacific Standard Time
- Tasmania Standard Time
- Magadan Standard Time
- Vladivostok Standard Time
- Russia Time Zone 10
- Central Pacific Standard Time
- Russia Time Zone 11
- New Zealand Standard Time
- UTC+12
- Fiji Standard Time
- Kamchatka Standard Time
- Tonga Standard Time
- Samoa Standard Time
- Line Islands Standard Time