显示正确的日期时间值

时间:2017-10-09 14:38:02

标签: c# datetime

我在美国时区。我试图使用C#解析以下日期。对于我从其他系统接收的以下输入日期,应该向用户显示的正确值应该是什么?

1.2017-10-04T16:24:55.000-04:00 

2.2017-10-04T13:14:35.000+04:00

感谢。

2 个答案:

答案 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需要考虑,如果不使用第三方库,它就是准确工作的一般噩梦。