R 中是否存在将ISO8601字符串解析为 POSIXt 对象的现有实现?ISO8601 规范允许以各种(非重叠)格式打印日期/时间,因此可能需要做一些正则表达式魔术来检测格式并将其提供给strptime
.
正确地做到这一点实际上可能非常具有挑战性,但是检测最常见格式的东西已经非常有帮助了。我很难想象我是第一个遇到这种情况的人,但我很难找到好的实现。
严格来说,你不能。我不需要知道任何关于 r 或 cran(甚至它们是什么)的知识来告诉你,因为我对 ISO 8601 的了解足以知道仅仅知道某事是 ISO 8601 不足以明确地知道它的含义通过它,尤其是在较短的形式中。
找出对方正在使用的 ISO 8601配置文件。如果他们不知道你在说什么,那么当你指出我在上一段中所说的内容时,你就是在帮他们一个忙。正如我曾经在别处写过的,
不幸的是,许多人在听到“ISO 8601”时会想到他们熟悉的特定配置文件,其他人知道使用 8601 是一件好事,但不熟悉实施细节。因此,规范或需求文档可能会提到 8601,但不会比这更明确。在这种情况下,重要的是寻求澄清,而不是假设您认为“ISO 8601”的格式是正确的。
所以,告诉他们“‘ISO 8601’不够具体,我需要确切地知道你在做什么,你对精度的限制是什么。” (可能您对 1582 年之前和可能在 0001 年之前的日期的政策是什么,您的闰秒政策,以及其他一些事情保持开放,但标准)
那么无论你处理什么都应该很容易:除了这一点模棱两可之外,它是一个非常直接的标准。它应该被认为是定义日期格式的标准,而不是定义日期格式的标准。
请参阅.parseISO8601
xts 包中的一种实现。我怀疑这会“开箱即用”,但它应该让您很好地了解如何实现您的特定需求。
这看起来很有希望:http ://cran.r-project.org/web/packages/parsedate
parsedate:识别和解析各种格式的日期,包括所有 ISO 8601 格式
自动解析日期,无需指定格式。目前它包括 git 日期解析器。它还可以识别和解析所有 ISO 8601 格式。
t <- strptime("2013-08-20T14:56:37", "%FT%T")
在大多数情况下,对我来说工作得很好。虽然它已经在几分之一秒内失败,并且不包括 Jon Hanna 提到的所有问题的解决方案。(这使得使用时间数据类型变得异常困难。)