如何将纳秒转换为字符?

时间:2019-05-21 18:09:06

标签: r data.table nanotime

考虑这个简单的例子

@XmlTransient

如您所见,将@XmlTransient @Hidden public getFoo(){ ... 时间戳转换为DT <- data.table::data.table(mytime = c(nanotime('2011-12-05 08:30:00.000',format ="%Y-%m-%d %H:%M:%E9S", tz ="GMT"), nanotime('2011-12-05 08:30:00.100',format ="%Y-%m-%d %H:%M:%E9S", tz ="GMT"), nanotime('2011-12-05 08:30:00.825',format ="%Y-%m-%d %H:%M:%E9S", tz ="GMT"))) #convert the timestamp to string DT[, mytime_character := strftime(mytime, format = '%Y-%m-%d %H:%M:%OS3')] > DT mytime mytime_character 1: 2011-12-05T08:30:00.000000000+00:00 2011-12-05 03:30:00.000 2: 2011-12-05T08:30:00.100000000+00:00 2011-12-05 03:30:00.099 3: 2011-12-05T08:30:00.825000000+00:00 2011-12-05 03:30:00.825 (使用nanotime)会为第二个时间戳创建错误的毫秒部分:character而不是{{1 }}

不幸的是,我需要将时间戳转换为字符串,以便其他编程语言可以提取它们。

有没有办法将时间戳正确转换为字符而又不损失精度?

谢谢!

2 个答案:

答案 0 :(得分:5)

您在这里有一个基本的误解。

我们使用nanotime ,因为R中的标准时间格式仅具有(非相当)微秒的分辨率。因此,通过在其上使用strftime(),您做错了。

但是nanotime是一个合适的软件包,当然有一个format()方法:

R> DT <- data.table::data.table(mt = c(nanotime('2011-12-05 08:30:00.000',format ="%Y-%m-%d %H:%M:%E9S",  tz ="GMT"),
+                                      nanotime('2011-12-05 08:30:00.100',format ="%Y-%m-%d %H:%M:%E9S",  tz ="GMT"),
+                                      nanotime('2011-12-05 08:30:00.825',format ="%Y-%m-%d %H:%M:%E9S",  tz ="GMT")))
R> 
R> DT[, fmt := format(mt)]
R> DT[]
                                    mt                                 fmt
1: 2011-12-05T08:30:00.000000000+00:00 2011-12-05T08:30:00.000000000+00:00
2: 2011-12-05T08:30:00.100000000+00:00 2011-12-05T08:30:00.100000000+00:00
3: 2011-12-05T08:30:00.825000000+00:00 2011-12-05T08:30:00.825000000+00:00
R>

答案 1 :(得分:1)

也许这对你有用

DT[, mytime_character := format(mytime)]
DT %>% str()

> DT %>% str()
Classes ‘data.table’ and 'data.frame':  3 obs. of  2 variables:
 $ mytime          :integer64 1323073800000000000 1323073800100000000 1323073800825000000 
 $ mytime_character: chr  "2011-12-05T08:30:00.000000000+00:00" "2011-12-05T08:30:00.100000000+00:00" "2011-12-05T08:30:00.825000000+00:00"
 - attr(*, ".internal.selfref")=<externalptr>