[R语言]R语言计算unix timestamp的坑

R+mongo的组合真是各种坑等着踩

由于mongo中的时间戳普遍使用的是unix timestamp的格式,因此需要对每天的数据进行计算的时候,很容易就想到对timestamp + gap对方式来实现每天的时间范围。

但这时候就埋下了一个坑,这个坑就是计算精度的问题。

ms级的时间戳长度是12位,R中会识别成1.421112+e12的格式。gap的则是 1000 * 60 * 60 *24 * i,数量级是10^8。两者相加,在取某个i的时候,会出现加出来的数据与下一天的timestamp对不上的情况。

在我的情况下,当i = 3的时候,就出现了这种异常。

关于计算精度的问题,感觉不应该只在R存在。其他脚本语言,在处理mongo按天递增的时候,也应该会碰到。

不过其他语言都有直接把时间转换成timestamp的函数,如果不是自己计算的gap,而是用toTimestamp(Date + 1)的方式去递增时间,则是不存在这个问题的。

由于R没有直接date2timestamp的函数,又下意识认为作为科学计算的R,应该会精确的处理数据的计算问题,所以没有防范。

时间: 2024-10-20 00:22:54

[R语言]R语言计算unix timestamp的坑的相关文章

R语言:SMOTE - Supersampling Rare Events in R:用R对非平衡数据的处理方法

SMOTE - Supersampling Rare Events in R:用R对稀有事件进行超级采样 在这个例子中将用到以下三个包 {DMwR} - Functions and data for the book "Data Mining with R" and SMOTE algorithm:SMOTE算法 {caret} - modeling wrapper, functions, commands:模型封装.函数.命令 {pROC} - Area Under the Curv

C语言中边界计算与不对称边界(二)

尽管C语言的数组会让新手感到麻烦,然而C语言中数组的这种特别的设计正是其最大优势所在.要理解这一点,以下是一些简单解释. 在所有常见的程序设计错误中,最难于察觉的一类是"栏杆错误",也常被称为"差一错误"(off-by-one error).例如这个问题:100英尺长的围栏每隔10英尺需要一根支撑用的栏杆,一共需要多少根栏杆呢?如果不加思索,大家会容易以为是100除以10,即为10根.其实,真正需要的是11根. 因为支撑10英尺长的围栏实际需要2根栏杆,即两端各一根

如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?

Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数.Unix时间戳不仅被使用在Unix 系统.类Unix系统中,也在许多其他操作系统中被广告采用. 目前相当一部分操作系统使用32位二进制数字表示时间.此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 1111

R(四): R应用开发-map篇

前几章对R语言的运行原理.基本语法.数据类型.环境部署等基础知识作了简单介绍,本节将结合具体案例进行验证测试. 案例场景:从互联网下载全国三甲医院数据,以地图作为背景,展现各医院在地图上的分布图.全国三甲医院数据来源 http://www.wxmp.cn/cms/detail-51610-23480-1.html  目录: map包研究 效果图 数据清洗 R开发 R脚本部署 map包研究: CRAN上地图的一个常用包就是maps (https://cran.r-project.org/web/p

在不同编程语言中对Unix时间戳进行转换(Unix timestamp)

最近用到unix时间转换在mysql和.net中的应用.将此资料保存在博客中. 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000) getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 1

Unix时间戳(Unix timestamp)转换工具

在线工具地址:http://tool.chinaz.com/Tools/unixtime.aspx 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 62135596800000

现在的Unix时间戳(Unix timestamp)

如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000 MySQL SELECT unix_timestamp(now()

[转]js 取得 Unix时间戳(Unix timestamp)

本文转自:https://blog.csdn.net/o0snow/article/details/6858829 js 取得 Unix时间戳 Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数.Unix时间戳不仅被使用在Unix 系统.类Unix系统中,也在许多其他操作系统中被广告采用. 目前相当一部分操作系统使用32位二

嵌入式 Linux C语言——C语言基础

嵌入式 Linux C语言--C语言基础 一.数据类型 1.基本数据类型 数据类型是创建变量的模型.变量名是连续存储空间的别名,程序中使用变量命名存储空间,通过变量可以使用存储空间.变量所占的内存大小取决于创建变量的数据类型. 2.有符号和无符号 有符号数中数据类型的最高位用于标识数据的符号,最高位为1表示为负数,最高位为0表示为正数. 计算机中有符号数通常使用补码表示,正数的补码为正数本身,负数的补码为负数的绝对值的各位取反后加1. 计算机中无符号数通常使用原码表示,无符号数默认为正数,没有符