解析W7和Server2012 R2之间的日期差异

时间:2015-10-13 06:53:29

标签: c# parsing datetime

DateTime Date;
DateTime.TryParse("01.09.2015", (new CultureInfo("en-CA")), DateTimeStyles.None, out Date);

Windows 7 SP1结果:

Date    {01.09.2015 00:00:00}   System.DateTime
Date    {01.09.2015 00:00:00}   System.DateTime
Day 1   int
DayOfWeek   Tuesday System.DayOfWeek
DayOfYear   244 int
Hour    0   int
Kind    Unspecified System.DateTimeKind
Millisecond 0   int
Minute  0   int
Month   9   int
Second  0   int
Ticks   635766624000000000  long
TimeOfDay   {00:00:00}  System.TimeSpan
Year    2015    int

Windows Server 2012 R2标准结果:

Date    {1/9/2015 12:00:00 AM}  System.DateTime
Date    {1/9/2015 12:00:00 AM}  System.DateTime
Day 9   int
DayOfWeek   Friday  System.DayOfWeek
DayOfYear   9   int
Hour    0   int
Kind    Unspecified System.DateTimeKind
Millisecond 0   int
Minute  0   int
Month   1   int
Second  0   int
Ticks   635563584000000000  long
TimeOfDay   {00:00:00}  System.TimeSpan
Year    2015    int

为什么这些差异日和月?需要任何补丁?

1 个答案:

答案 0 :(得分:0)

DateTime.TryParse使用提供的文化standard date and time formats。看起来这种en-CA文化与Windows 7和Windows Server 2012具有不同的格式。

似乎使用dd/MM/yyyy格式的Windows 7和使用MM/dd/yyyy格式的Windows Server 2012。

此设置可以更改.NET Framework版本和/或操作系统版本。别担心。如果您想要完全解析字符串,可以使用DateTime.ParseExactDateTime.TryParseExact方法为字符串提供准确的格式。

string s = "01.09.2015";
DateTime dt;
if(DateTime.TryParseExact(s, "dd.MM.yyyy", CultureInfo.GetCultureInfo("en-CA"),
                          DateTimeStyles.None, out dt))
{
    // 1 September 2015
}

string s = "01.09.2015";
DateTime dt;
if(DateTime.TryParseExact(s, "MM.dd.yyyy", CultureInfo.GetCultureInfo("en-CA"),
                          DateTimeStyles.None, out dt))
{
    // 9 January 2015
}