我该如何将这些字符串解析成UTC日期?

3

我正在爬取一个网站,其中日期有两种形式:

11-22-2011 07:41 AM
Today @ 07:41 AM

这两个时间都是GMT-8时区。我希望能够从中获取Unix时间戳,以便构造有意义的日期对象。

你知道这可能是哪个时区吗?大约一个月前,该网站显示的是GMT-9时间。JavaScript能自动处理夏令时吗?

我很难解析它们。问题的一部分在于时区。

目前,我正在使用Date.js的parseExact函数:

date = Date.parseExact(date + ' PDT', 'MM-dd-yyyy H:mm tt zzz');

然而,这似乎将12AM解析为12:00,而不是0:00。此外,我完全不知道如何处理以today @开头的内容。


"12 AM"没有明确定义,请参见http://en.wikipedia.org/wiki/Midnight。 - Wooble
@Wooble:我明白。然而,当我收到12点时,我知道它应该被解释为同一天早上的0:00 - Eric
1
我不认为这个问题应该被踩。这是一个完全合理的问题。 - LuxuryMode
@Wooble - 在我看来,那篇维基百科文章过于吹毛求疵,甚至可能是完全错误的。争论的关键在于AM表示午夜后的12小时时段,而午夜并不是“午夜之后”。事实上,AM表示拉丁语“ante meridiem”即“中午之前”。由于午夜开始新的一天,因此AM是正确的,我认为也是明确无误的。该文章承认计算机、数字时钟甚至美国政府手册都将午夜表示为12:00 AM。它没有提供任何参考资料表明12:00 AM在任何其他文化或背景下有不同的含义。 - gilly3
美国政府印刷局样式手册第29版(2000年)的12.9节建议在午夜时使用“12 a.m.”,而非“12 p.m.”。即使在美国政府文件中,这也并不是明确无误的;它取决于它们的出版时间。 - Wooble
4个回答

1

当我使用http://www.datejs.com/上的交互式解析器尝试您提供的两个示例时,我得到了预期的结果。

所讨论的时区可能是“美国西海岸”,也称为“太平洋时间”。

不幸的是,在一年中的不同时间,这意味着不同的事情。在春季和夏季,该时区被称为“PDT”(GMT-0700),其余时间被称为“PST”(GMT-0800)。

更进一步复杂化的是,这种变化发生的日期与其他时区(例如欧洲)发生变化的日期不同。

我认为没有一种可以自动考虑到这一点的指定Date.js时区值的方法。


“Today @” 这个不适用于边界附近。今天被忽略了,所以它被错误地解析为“在PST时区的你所在的今天7:41”,而不是“在PST时区的当天7:41”。因此,它可能会差一天。 - Eric

1
你可以编写自己的时区感知日期解析逻辑,考虑到远程服务器的时区。
伪代码:
if date starts with "Today @"
  replace "Today @" with currentDateInRemoteTimezone in date
endif

parse_timezone-aware(date)

我不确定如何获取currentDateInRemoteTimezone - Eric
您需要找出服务器所在的时区,并定义在解析时该时区与UTC的差异。我没说这很容易。抱歉 :) - Till
1
你看过https://github.com/mde/timezone-js吗?我没时间自己检查,但描述看起来很有用。 - Till
这看起来确实很有用。我在哪里可以找到这些“Olson时区文件”? - Eric
我遇到了一个问题,这个程序运行在一个不需要XHR的环境中(一个Chrome扩展程序)。有提到一些“预编译json”的内容,但没有对格式进行描述,并且我无法访问生成它的工具。此外,我找不到告诉它使用JSON的指令。 - Eric

0
为什么不直接添加HHHH:mm zzz以获取12:00?

0

使用小写的h表示小时数为1-12。大写的H则表示小时数为0-23。根据您的示例,我会使用以下格式:

MM-dd-yyyy hh:mm tt

文档

你应该单独处理“Today @”这个字符串。当你找到这个字符串时,期望下一个标记是一个形式为hh:mm tt的时间。将第二部分解析为时间,并与今天(本地)的日期结合。使用Date.js函数在程序上实现这并不难,但你不会找到一个单一的格式字符串来捕获“Today @”部分(如你所知)。


糟糕,我复制了错误的代码行。我本来想要小写字母h。 - Eric
问题在于我不想要“本地”的今天 - 我想要“远程”的今天。 - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接