我正在使用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日。
我很困惑选择哪种文化的确切日期?
答案 0 :(得分:3)
都不是Unspecified
。
首先,在.NET Framework中,DateTime
structure 不保留时区信息。它具有Kind
属性,可将某些信息反映为Utc
,Local
或Unspecified
,但它们不是完美地表示时区。
在您的情况下,由于您未提供任何其他参数,因此结果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:00
或5/9/2019 4:00:00 AM
一样,具体取决于执行代码的服务器系统当前格式。您可以通过右键单击Windows任务栏中的时间来查看系统的当前区域性,并查看格式。