如何从此字符串中检索 POSIX 时间戳?

How to retrieve POSIX time stamp from this string?

我有如下字符串:

"{u'iso': u'2015-05-12T12:43:17.512Z', u'__type': u'Date'}"

我想将它们转换为时间。我尝试了以下方法:

time_format_string = "{u'iso': u'%Y-%m-%dT%H:%M:%S', u'__type': u'Date'}"
strptime(test_string, time_format_string)

这会返回 NA,没有错误消息。我做错了什么?

您省略了格式字符串中秒数后的 "Z"。但是,如果您添加 "Z",结果仍然是 NA,这看起来可能是因为您有小数秒并且您使用 "%S" 而不是 "%OS"

options(digits.secs=3)  # print fractional seconds
test_string = "{u'iso': u'2015-05-12T12:43:17.512Z', u'__type': u'Date'}"
time_format_string = "{u'iso': u'%Y-%m-%dT%H:%M:%SZ', u'__type': u'Date'}"
strptime(test_string, time_format_string)
#[1] NA
time_format_string = "{u'iso': u'%Y-%m-%dT%H:%M:%OSZ', u'__type': u'Date'}"
strptime(test_string, time_format_string)
#[1] "2015-05-12 12:43:17.512 CDT"

无论如何,这很容易避免,因为您不需要在最后一次所需的时间组件后在格式字符串中指定任何内容(请参阅 ?strptime 中的详细信息:“每个输入字符串都是根据指定的格式进行必要的处理:忽略任何尾随字符")。

time_format_string = "{u'iso': u'%Y-%m-%dT%H:%M:%S"
strptime(test_string, time_format_string)
#[1] "2015-05-12 12:43:17 CDT"

如果你想保留小数秒,你应该使用"%OS"而不是"%S"。您还应该明确设置时区,以避免在您机器的本地时区中解析时间。我将时区设置为 "UTC" 因为这很可能是秒后的 "Z" 所代表的。

time_format_string = "{u'iso': u'%Y-%m-%dT%H:%M:%OS"
strptime(test_string, time_format_string, tz="UTC")
#[1] "2015-05-12 12:43:17.512 UTC"