r - 如何将纳米时间转换为字符?
问题描述
考虑这个简单的例子
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
(使用strftime
)会为第二个时间戳创建错误的毫秒部分:.099
而不是.100
不幸的是,我需要将我的时间戳转换为字符串,以便它们可以被其他编程语言摄取。
有没有办法将时间戳正确转换为字符而不会丢失精度?
谢谢!
解决方案
你在这里有一个基本的误解。
我们使用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>
推荐阅读
- java - 通过多个属性对对象内的列表进行分组:Java 8
- sql-server - 使用 Linked Server TO Oracle 进行插入、更新、删除
- automata - 构造确定性有限自动机等于非确定性自动机
- apache - Apache2:.htaccess 重定向太多
- django - Virtualenv已激活但python仍在运行系统版本
- mysql - mysql坏查询性能不一致
- javascript - 每个条目带有背景颜色填充和边框的 Css Textarea 文本
- angular - 在 Linux 上更新 protoc-gen-grpc-web
- python - 使两个不同字典的公共值的字典键相同
- unit-testing - 如何在 F# 中对异步方法进行单元测试?