Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将nanotime转换为字符?_R_Data.table_Nanotime - Fatal编程技术网

R 如何将nanotime转换为字符?

R 如何将nanotime转换为字符?,r,data.table,nanotime,R,Data.table,Nanotime,考虑这个简单的例子 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"),

考虑这个简单的例子

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
如您所见,使用strftime将nanotime时间戳转换为字符会为第二个时间戳创建错误的毫秒部分:.099而不是.100

不幸的是,我需要将时间戳转换为字符串,以便其他编程语言能够接收它们

有没有一种方法可以在不损失精度的情况下将时间戳正确地转换为字符


谢谢

也许这对你有用

DT[,mytime_字符:=formatmytime] DT%>%str >DT%>%str 类“data.table”和“data.frame”:3个obs。共有2个变量: $mytime:integer64 13230738000000000000 132307380010000000 13230738008000000 13230738008000000 $mytime--字符: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 -属性*,.internal.selfref=
你在这里有一个基本的误解

我们使用纳米时间是因为R中的标准时间格式只有微秒的分辨率。所以你,用strftime在上面,是做错了

但是作为一个合适的包,nanotime当然有一个格式化方法:


再次感谢德克抽出时间。我尝试使用nanotime的原因是它不会对时间戳(如“2011-12-05 08:30:00.100”)产生舍入错误。例如,这种情况不会发生在熊猫身上。我的理解是,奈米时间之所以能够做到这一点,得益于它的微秒精度,尽管我可能错了。如果有函数可以从nanotime时间戳中提取年、日、小时、分钟等其他组件,而不必转换为posixct,那就太好了。再说一次,也许我在这里很傻。谢谢@ℕʘʘḆḽḘ Dirk回答的要点是,您应该使用格式化方法,而不是转换为posixct。你想要今年吗?formatx,format=%Y。您想要哪一天?formatx,格式=%d。不需要其他功能。你用strftime吗?你隐式地转换到posix,失去了nanotime的优势。哈!!!我不明白!谢谢你的澄清。这是非常有用的。此外,纳米时代似乎与Tibble玩得很好,但也不确定。我的第一行ie在回答你的另一个问题时明确告诉你data.table确实如此。这是我用的。如果您将use tibble读入其中,则会出现问题。也许tibble管用,也许不管用。不管是哪种方式,我共同编写了nanotime,我可以向你保证,我不会使用tibble。好吧,但当我打印带有nanotime时间戳的tibble时,我得到的是类型。这不是我们想要的吗?你是说如果我使用tibble,计算会受到影响吗?我问这个问题是因为让这个奇妙的软件包与tibbles兼容将是非常棒的,我会根据需要使用data.table或tibbles
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>