C# 用C语言转换日期#

C# 用C语言转换日期#,c#,asp.net,datetime,C#,Asp.net,Datetime,我有一个ASP.NETMVC应用程序未正确转换日期值。我居住在一个时区。我的用户居住在另一个。此时,假设我有以下字符串: var date = "7/1/2014 4:00:00 AM +00:00"; 我正在使用以下命令将此字符串转换为日期时间: DateTime temp; if (DateTime.TryParse(date, out temp)) { temp = temp.ToShortDateString(); WriteToLog(temp); } 当temp写

我有一个
ASP.NET
MVC
应用程序未正确转换日期值。我居住在一个时区。我的用户居住在另一个。此时,假设我有以下字符串:

var date = "7/1/2014 4:00:00 AM +00:00";
我正在使用以下命令将此字符串转换为日期时间:

DateTime temp;
if (DateTime.TryParse(date, out temp))
{
    temp = temp.ToShortDateString();
    WriteToLog(temp);
}

当temp写入日志文件时,我看到它被写入
6/30/2014
。这可能是什么原因造成的?我期待着
2014年7月1日
。它在我的机器上工作。但是,它在我的用户机器上不起作用。

答案是时区。您正在解析特定的时间点(格林尼治标准时间上午4:00)。这与前一天晚上10:00 CST的时间点相同

如果将其设置为UTC:

var s = temp.ToUniversalTime().ToShortDateString();

您将获得请求的输出。

默认情况下,代码将使用服务器的本地时间,以下是我在在线网站中如何使用
DateTime

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());
}
  • 将其转换为UTC:

    var mydate = DateTime.UtcNow;
    // Or
    var mydate2 = (new DateTime(2015, 6, 3)).ToUniversalTime(); 
    
    这将使你的应用程序时区独立

  • 将其转换为所需时区:

    使用类将本地时间转换为另一个备选时区

    var mydate = DateTime.UtcNow;
    TimeZoneInfo iranTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Iran Standard Time");
    var tehranDateTime = TimeZoneInfo.ConvertTime(mydate, iranTimeZoneInfo);
    
  • 此代码将始终在任何具有正确日期、时间和时区配置的计算机上返回德黑兰当地时间

    以下是您可以使用的有效时区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
    

    您正在解析的日期是GMT(
    +00:00
    ),因此您的用户必须位于GMT之前超过4小时的时区中。在该时区中,它仍然是
    2014年6月30日
    。很好地使用
    日期时间样式。调整通用
    。这比
    ToUniversalTime
    方法更简洁。