【问题标题】:Given an unzoned DateTime and a timezone, how can I construct an instant in NodaTime?给定一个未分区的 DateTime 和一个时区,我如何在 NodaTime 中构造一个瞬间?
【发布时间】:2015-05-13 22:05:06
【问题描述】:

我有一个明确构造的DateTime

var myDateTime = new DateTime(2015,1,1,0,0,0);

我有一个明确获得的时区。

var myTimeZone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];

myDate 已知在 myTimeZone 中表示

我应该如何使用这些信息来使用 NodaTime 生成 ZonedDateTimeInstant

【问题讨论】:

  • 投反对票的人能否解释我如何改进问题?
  • 对我来说似乎很清楚。不知道为什么它被否决了。

标签: c# .net timezone nodatime


【解决方案1】:

首先,将您的DateTime 转换为LocalDateTime

LocalDateTime ldt = LocalDateTime.FromDateTime(myDateTime);

然后你可以将它分配给一个区域:

ZonedDateTime zdt = ldt.InZoneLeniently(myTimeZone);

并将其映射回瞬间:

Instant instant = zdt.ToInstant();

【讨论】:

  • 但日期时间不是在我当地的时区。
  • LocalDateTime 中的“本地”并不意味着“本地为您”。它只是对 somebody 意味着本地。它与所有时区信息分离。它只是一个日期和时间,就像DateTime.Kind == DateTimeKind.Unspecified
  • 换句话说,它与DateTimeKind.Local 的定义不同,后者确实 表示“本地为您”。
  • @Matthew:是的,我们知道这会导致混乱 :( 如果我有一个 非常好的 替代方案,我会考虑将其重命名为2.0...但到目前为止我还没有听到更好的消息。
猜你喜欢
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多