【问题标题】:Moment.js timezone conversion C# .NETMoment.js 时区转换 C# .NET
【发布时间】:2014-11-17 06:36:11
【问题描述】:

是否有可用的 c# 插件来处理所有 moment.js 时区。

我很难比较后端中的日期,因为来自 moment.js 的时区与来自 .net DateTime 的时区不同。

在比较不同的时区日期之前,我需要将时间转换为 Utc。 我正在使用 nodatime,它能够处理一些时区,但不是全部。

谢谢。

编辑: NodaTime 处理了大部分时区,但我仍然需要涵盖缩写。有什么可用的吗?

谢谢。

【问题讨论】:

  • 你能将 moment.js 日期时间转换为 utc 吗?这可以由 nodatime 解析-
  • 谢谢。我找到了 nodatime,但在处理时区缩写时仍然遇到问题。还有其他方法可以通过缩写获取时区吗?例如ACST = 澳大利亚中部标准时间
  • 您可以找到所有曾使用特定缩写的时区,但最好完全避免使用缩写。 moment.js 不会为您提供完整的 IANA ID,例如欧洲/伦敦?
  • @Milo - 不清楚你在说什么。请显示一个代码示例。如果不通过 moment-timezone 并指定 IANA 时区 ID,您将无法得到一个缩写词。另外,请认识到许多时区缩写是模棱两可的。例如,“CST”有 5 种不同的含义。 See this list for more examples.
  • 任何使用缩写的东西确实都有问题 - 他们可能还没有意识到这一点。

标签: datetime timezone momentjs date-conversion nodatime


【解决方案1】:

所以 NodaTime 处理了 Olson 时区以及 GMT+ 、 UTC 等。对于缩写,我解决了这个

public static DateTimeZone GetTimeZone(string id)
    {
        DateTimeZone timezone = DateTimeZoneProviders.Tzdb.GetZoneOrNull(id);

        if (timezone == null) {
            var instant = Instant.FromDateTimeUtc(DateTime.UtcNow);
            var source = DateTimeZoneProviders.Tzdb;
            id = source.Ids.Where(i => source[i].GetZoneInterval(instant).Name == id).FirstOrDefault();
            timezone = DateTimeZoneProviders.Tzdb.GetZoneOrNull(id);
        }

        return timezone;
    }

【讨论】:

    猜你喜欢
    • 2018-07-08
    • 2015-03-21
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多