【问题标题】:What kind of date format is this and how do I transform it?这是什么样的日期格式,我该如何转换它?
【发布时间】:2014-08-08 23:40:59
【问题描述】:

私有(无公共文档)API 发出 GET 请求会返回 JSON 格式的数据。

日期的值如下所示:

AanmeldDatum: "/Date(1262300400000+0100)/"

还有一个变量叫做AangebodenSindsTekst,意思是OfferedSinceText,它的值是"8 augustus 2014"。所以未知的日期格式应该被解析成那个特定的值。

我想知道它是哪种日期格式,如何使用 Ruby 将其转换为类似 2014-08-08 的格式?

我试过了:

require 'time'

t = '1262300400000+0100'

t2 = Time.parse(t)  

# => ArgumentError: no time information in "1262300400000+0100"

【问题讨论】:

  • API 没有提供有关其日期格式的任何文档吗?你能告诉我们这是什么类型的系统吗?
  • 不,它不是,它是一个私有 API。不幸的是,我对系统一无所知。
  • 格式的问题是invented at Microsoft,在使用JavaScriptSerializerDataContractJsonSerializer的代码中可以找到。较新的 ASP.Net WebAPI 框架改用 Json.net,并鼓励使用 ISO8601 格式。它有时被称为“ASP.NET JSON 日期”,并且在一些“现代”库(如 moment.js)中得到支持。

标签: ruby json date datetime


【解决方案1】:

Ruby 的 Time 类是你的朋友,尤其是 strptime 方法:

require 'time'

foo = Time.strptime('1262300400000+0100', '%N') # => 2014-08-08 16:57:25 -0700
foo = Time.strptime('1262300400000+0100', '%N%z') # => 2014-08-08 08:57:25 -0700

%N 告诉 Ruby 使用纳秒。如果您不需要其余的值,它会丢弃第 9 位之后的精度。对于我们大多数人来说,纳秒精度已经足够了。

%z 告诉 Ruby 查找时区偏移量,然后将其应用于返回值。

虽然parse 通常可以弄清楚如何拆开传入的字符串,但它不是防弹的,也不是无所不知的。为了速度,如果您的字符串一致,我建议您学习并依赖strptime

【讨论】:

  • 执行foo = Time.strptime('1262300400000+0100', '%N') 返回当前时间和日期# => 2014-08-09 09:18:35 +0200foo = Time.strptime('1262300400000+0100', '%N%z') 也是如此,它返回 # => 2014-08-09 10:19:29 +0200。我正在使用 Ruby 2.1.2。知道为什么会这样吗?
【解决方案2】:

正如锡人在this 回答中指出的那样,请改用以下内容:

Time.strptime('1262300400000+0100', '%Q%z')

【讨论】:

    【解决方案3】:

    它可能是自 epoc 以来的毫秒数,去掉最后 3 个零并将其插入 unix 时间戳转换器,输出为 2009 年 12 月 31 日

    时间戳:1262300400

    日期(M/D/Y @ h:m:s):12 / 31 / 09 @ 11:00:00pm UTC

    【讨论】:

    • 而+0100只是表示时区,是标准格式
    • 我注意到一个名为AangebodenSindsTekst 的值,它的意思是OfferedSinceText,它的值是"8 augustus 2014"。所以日期格式应该被解析成那个特定的值。
    猜你喜欢
    • 2020-12-15
    • 2014-04-11
    • 2018-07-22
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2023-02-22
    相关资源
    最近更新 更多