Datetime UTC日期时间字符串到使用节点时间的分区日期时间

Datetime UTC日期时间字符串到使用节点时间的分区日期时间,datetime,timezone,nodatime,Datetime,Timezone,Nodatime,我需要将UTCDateTime字符串转换为ZonedDateTime UTCDateTime字符串只能是一种模式(M/dd/yyyy h:mm:ss tt),因为SharePointDateTime类型列中仅支持此格式 假设(2013年5月28日下午1:00:00)为我的UTC时间,我如何将其转换为ZoneDateTime?我目前正在使用以下代码获取ZoneDateTime var dateTimeZone=DateTimeZoneProviders.Tzdb[zoneID]; var inst

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

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

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

var dateTimeZone=DateTimeZoneProviders.Tzdb[zoneID];
var inst=从UTC(年、月、日、小时、分钟)开始的瞬间;
ZonedDateTime dz=新的ZonedDateTime(inst,dateTimeZone);

上述代码需要
小时
分钟
作为
int
值。有没有一种更简单的方法可以直接从UTC字符串获取
ZoneDateTime

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

如果您有一个字符串表示,那么在代码中的某个点上,您执行了一个或类似的操作,它选择了默认值

因此,您应该能够使用:

var inst=Instant.FromDateTimeUtc(您的日期时间);
var dz=新的ZoneDateTime(inst,dateTimeZone);

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

如果您说得对,sharepoint不会将值存储为字符串。我有一个小问题,使用datetime.Parse将我获得的datetime字符串转换为datetime类型是否安全,然后继续使用您的代码获取基于区域的datetime值?不,这不安全。。解析可以引入区域设置细节。将其保留为日期时间。Matt,我找到了将UTC日期时间作为字符串的原因。Sharepoint以UTC格式存储值,但显示以当前服务器时区存储的值。此外,当我们以datatable/xml格式读取列表项的值时,由于序列化,UTC将转换为服务器时区的值。好的,因此您不是直接从数据库获取数据,而是从SharePoint生成的您无法控制的xml获取数据,对吗?您能在XML中发布一点日期的样子吗?人们希望他们使用像ISO8601这样的标准格式,而不是特定于区域性的显示格式。