从 R POSIXlt 转换为 T-Sql 日期时间

Converting from R POSIXlt to T-Sql datetime

我需要将 R POSIXlt 对象重组为适当的 T-SQL 查询,该查询将 return SQL 日期时间。我想应该有一种方法可以将 POSIXlt 转换为双精度,然后使用该双精度来制作 SQL 日期时间,但我无法弄清楚如何做到这一点。这是我尝试过的:

date = as.POSIXlt(Sys.time())
date_num = as.double(date)

之后我复制了 date_num (1469491570) 的内容并尝试将其粘贴到以下 SQL 查询中以查看会发生什么:

select CONVERT(datetime, convert(varchar(10), 1469491570));

但是,这个错误出现了,我想这是预料之中的,因为它需要日期的字符串表示而不是某个随机数...

编辑:我正在寻找可以将 POSIXlt 转换为从 1900 开始的一些抽动或毫秒数的东西,然后使用该数字创建 T-SQL 日期时间。

有点不清楚,因为您一直在谈论 "dates" 但似乎需要时间(自参考日期以来的小间隔持续时间)。试试这个:

      date = as.POSIXlt(Sys.time())
      date_num = as.numeric( as.POSIXct(date) ) # should now be seconds from MN 1970-01-01

进一步注意到 Sys.time() 应该是 POSIXct-class。根据这个,有一个 TSQL 日期时间,其格式与您从 format.POSIXt 中看到的完全相同,使用 'format' 参数的默认值:https://msdn.microsoft.com/en-us/library/ms186724.aspx,因此您甚至可以尝试(使用合适的 class接收列的定义:

date = format( as.POSIXlt(Sys.time()) )
date     # now a character value
#[1] "2016-07-25 18:48:08"

函数:

julian(x, origin = as.Date("1970-01-01"), ...)

可以将 POSIX 对象转换为到您指定起点的天数,然后您应该能够转换为秒数或毫秒数。

例如:

as.numeric(julian(as.Date("2016-07-25"))) 

是从 1970 年 1 月 1 日(Unix 时间的开始)算起的 17007 天或

as.numeric(julian(as.Date("2016-07-25"), origin = as.Date("1900-01-01"))) 

或 windows 从接近开始到时间开始的 42574 天。