以明确定义的方式在日期和秒之间切换

Switch between dates and seconds in a well defined manner

I 运行 时间源自日期的离散事件模拟。当我将所有日期转换为整数时(seconds 中的相对时间),我认为模拟 运行 快得多。 最好的方法是什么,以明确定义的方式在 dateseconds 之间切换

我想我可以使用 origin 来达到这个目的,但它不会影响结果:

> as.numeric(as.POSIXct("2016-01-01 00:00:00 GMT",origin="2016-01-01",tz="GMT"))
> as.numeric(as.POSIXct("2016-01-01 00:00:00 GMT",origin="1970-01-01",tz="GMT"))

两者都导致 [1] 1451606400

(只有 tz 参数改变了结果,当然没问题:
> as.numeric(as.POSIXct("2016-01-01 00:00:00 CEST", tz= "America/Chicago"))
[1] 1451628000)

您可以使用 difftime() 来计算某个时间戳和参考时间之间的差异:

as.numeric(difftime(as.POSIXct("2016-01-01 00:00:00",tz="GMT"),
    as.POSIXct("1970-01-01 00:00:00",tz="GMT"), units = "secs"))
## [1] 1451606400

通过为 units 选择另一个值,您还可以获得分钟数、小时数等。

origin 的两种选择得到相同结果的原因是此参数仅用于将数字转换为日期时使用。然后,该数字被解释为自您传递给函数的原点以来的秒数。

在内部,POSIXct 对象始终存储为自 1970 年 1 月 1 日以来的秒数 00:00:00,UTC,与您在进行转换时指定的来源无关。因此,对于任何来源选择,转换为数字都会得到相同的结果。

你可以看看as.POSIXct()的文档:

## S3 method for class 'character'
as.POSIXlt(x, tz = "", format, ...)

## S3 method for class 'numeric'
as.POSIXlt(x, tz = "", origin, ...)

如您所见,origin 只是 numeric 方法的参数,而不是 character.

方法的参数