UTC使用NodaTime的日期时间字符串到Zoned DateTime

时间:2013-05-28 09:01:40

标签: datetime timezone nodatime

我需要将UTC DateTime字符串转换为ZonedDateTime

UTC DateTime字符串只能是一种模式(M/dd/yyyy h:mm:ss tt),因为SharePoint DateTime类型列中仅支持此格式。

假设(5/28/2013 1:00:00 PM)为我的UTC时间,我该如何将其转换为ZonedDateTime?我目前正在使用以下代码获取ZonedDateTime

var dateTimeZone = DateTimeZoneProviders.Tzdb[zoneID];
var inst = Instant.FromUtc(year, month, day, hour, minute);
ZonedDateTime dz = new ZonedDateTime(inst, dateTimeZone);

上述代码需要yearmonthdayhourminute作为int值。是否有更简单的方法直接从UTC字符串中获取ZonedDateTime

1 个答案:

答案 0 :(得分:3)

我认为您对源数据感到困惑。 SharePoint不存储日期的字符串。它将它们存储为DateTime类型。它们是UTC,但它们不是字符串。

如果您有字符串表示形式,那么在代码中的某个位置您执行了.ToString()或类似操作,并且它选择了默认的"G" format specifier

所以你应该能够使用:

var inst = Instant.FromDateTimeUtc(yourDateTime);
var dz = new ZonedDateTime(inst, dateTimeZone);

您拥有的另一个选项是在SharePoint中使用DateTimeOffset字段而不是UTC DateTime字段。 Read here。然后,您可以使用Instant.FromDateTimeOffset()