我有以下字符串:
"{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
,但没有错误消息。我做错了什么?
答案 0 :(得分:2)
您在格式字符串中的秒后省略了"Z"
。但是,如果您添加NA
,结果仍为"Z"
,因为您有小数秒,而您使用"%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"
所代表的。
$ timeout -s 9 10s xinput test 8 | wc -l