【发布时间】:2019-05-09 06:35:57
【问题描述】:
我正在使用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) 重载并在样式参数中包含 DateTimeStyles.NoCurrentDateDefault,在这种情况下,该方法假定日期为 0001 年 1 月 1 日。
我很困惑选择日期的确切文化是什么?
【问题讨论】:
-
获取执行机器的时区
-
您可以随时查看源代码referencesource.microsoft.com/#mscorlib/system/…(与大多数其他方法不同,
Parse并不是最直接的代码) -
它使用
Thread.CurrentThread.CurrentCulture作为参考。使用Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");更改它,它将以法语格式显示日期/时间。指定IFormatProvider(在DateTime.Parse("value", [IFormatProvider])中)不会改变结果。时间是您输入的数字。