`DateTime.Parse`解析哪个时区的时间戳?

时间:2019-05-09 06:35:57

标签: c# .net datetime parsing

我正在使用DateTime.Parse方法解析日期中的字符串时间。它会正确解析并返回我今天的日期和输入的时间。但是我无法确定将日期作为日期的时区。是考虑本地日期还是UTC日期?

public class Program
{
    public static void Main(string[] args)
    {
        //Your code goes here
        Console.WriteLine(DateTime.Parse("4:00"));
        //prints 09.05.2019 04:00:00 - here did it take 09.05.2019 from local timezone or is it UTC?
    }
}

在介绍DateTime.Parse的官方documentation时,隐含提及如下:

  

一个带有时间但没有日期成分的字符串。除非您调用Parse(String,IFormatProvider,DateTimeStyles)重载并且在styles参数中包括DateTimeStyles.NoCurrentDateDefault,否则该方法假定当前日期,在这种情况下,该方法假定日期为0001年1月1日。

我很困惑选择哪种文化的确切日期?

2 个答案:

答案 0 :(得分:3)

都不是Unspecified

首先,在.NET Framework中,DateTime structure 保留时区信息。它具有Kind属性,可将某些信息反映为UtcLocalUnspecified,但它们不是完美地表示时区。

在您的情况下,由于您未提供任何其他参数,因此结果DateTime将为Unspecified

它在documentation上表示为;

  

如果s包含时区信息,则此方法返回DateTime   其Kind属性为DateTimeKind.Local的值并转换日期   并以s为当地时间。 否则,它不执行任何时区   转换并返回其Kind属性为的DateTime值   DateTimeKind。未指定。

对于表示形式部分,当您在DateTime方法中使用Console.WriteLine时,它将调用WriteLine(object) overload,而此calls是当前的FormatProvider,即{{3} } Thread.CurrentThread.CurrentCulture

答案 1 :(得分:0)

默认情况下,它将选择系统当前处于活动状态的区域性(正在执行C#代码)本地日期及其格式,然后将您的时间附加到该日期。由于您的时间只有一个数值,即4,因此它将列为4 AM。

因此,输出可能像09.05.2019 04:00:005/9/2019 4:00:00 AM一样,具体取决于执行代码的服务器系统当前格式。您可以通过右键单击Windows任务栏中的时间来查看系统的当前区域性,并查看格式。

相关问题