我的数据库中有一组日期时间,由Javascript ES6
生成。在R中,我将它们作为function callback_b(p) {
return function(){
alert('b says'+ p)'
}
}
读入数据框,之后我需要将它们转换为POSIXct日期时间,但我尝试的test(callback_b("b"))
的任意组合都返回new Date()
,任何想法如何修理它?谢谢
例如,以下是我的一些数据:
character
答案 0 :(得分:4)
首先,数据库应该存储实际的日期时间值,而不是字符串。如果无法解决此问题,则应修改生成数据的代码以返回ISO8601字符串。只需拨打Date.toJSON()或相同的toISOString()即可获得ISO8601表单中的字符串:2017-02-14T12:55:58.376Z
。
顾名思义,Json日期采用这种格式。所有REST API都期望这样的参数。其他任何事情都只是掩盖了这个问题。
您无法解析当前文本的原因是您可能处于非英语语言环境中。您可以通过将LC_TIME
设置为C
来停用本地化解析。
执行此操作后,您可以使用'%a %b %d %Y %H:%M:%S GMT%z'
格式字符串解析文本。请注意GMT
和%z
。 GMT
字面值确保字符串中忽略GMT
。 %z
将解析偏移量。
摘录:
datetimes = c("Thu Dec 01 2016 14:53:38 GMT+0100 (CET)",
"Thu Dec 01 2016 14:54:38 GMT+0100 (CET)",
"Thu Dec 01 2016 14:55:38 GMT+0100 (CET)")
Sys.setlocale("LC_TIME", "C")
strptime(datetimes, format = '%a %b %d %Y %H:%M:%S GMT%z')
将返回:
[1] "2016-12-01 15:53:38" "2016-12-01 15:54:38" "2016-12-01 15:55:38"
您会注意到偏移量已被考虑在内,以便为我的机器生成正确的本地时间,冬季时间为+2:00。
<强>更新强>
toJSON()
和toISOString()
都返回UTC时间。如果您想保留偏移信息并且数据是使用Javascript生成的,则可能必须使用moment.js
生成带偏移量的字符串,as shown here:
var m = moment(); // get "now" as a moment
var s = m.format(); // the ISO format is the default so no parameters are needed
// sample output: 2013-07-01T17:55:13-07:00
答案 1 :(得分:2)
您的区域设置可能不是英文:
var promises = [];
promises.push(MyService.getPromise().then(function(result) {
map["A"]["B"] = result;
}));
promises.push(MyService.getPromise().then(function(result) {
map["A"]["C"] = result;
}));
...
$q.all(promises).then(function() {
// map is initialized here
})