我在美国时区。我试图使用C#解析以下日期。对于我从其他系统接收的以下输入日期,应该向用户显示的正确值应该是什么?
1.2017-10-04T16:24:55.000-04:00
2.2017-10-04T13:14:35.000+04:00
感谢。
答案 0 :(得分:1)
首先,不要使用DateTime
,而是使用DateTimeOffset
(或某些NodaTime类型,如提到的@DiskJunky)。这允许您使用给定的时间偏移量解析/存储每个值。
您提供的文本应该适用于默认解析:
string test1 = "2017-10-04T16:24:55.000-04:00";
string test2 = "2017-10-04T13:14:35.000+04:00";
DateTimeOffset dateTime;
if (DateTimeOffset.TryParse(test1, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
Console.WriteLine("Date 1: " + dateTime);
}
if (DateTimeOffset.TryParse(test2, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
Console.WriteLine("Date 2: " + dateTime);
}
当时间值被解析为DateTimeOffset
时,您可以按照您想要的方式转换和显示它们...例如,使用dateTime.ToLocalTime()
获取美国调整时间或获得更轻松的国际可交换价值dateTime.ToUniversalTime()
。
答案 1 :(得分:0)
如果您要向用户显示日期并需要考虑时区,建议的方法是使用NodaTime之类的库。除了UTC差异之外,还有一些区域DST需要考虑,如果不使用第三方库,它就是准确工作的一般噩梦。