以明确定义的方式在日期和秒之间切换
Switch between dates and seconds in a well defined manner
I 运行 时间源自日期的离散事件模拟。当我将所有日期转换为整数时(seconds
中的相对时间),我认为模拟 运行 快得多。
最好的方法是什么,以明确定义的方式在 date
和 seconds
之间切换
- 手动设置参考时间(例如
"1970-01-01 00:00:00 GMT"
或"2016-01-01 00:00:00 GMT"
),
- 时区和
- 来源(在
lubridate
中不可能?)
我想我可以使用 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
.
方法的参数
I 运行 时间源自日期的离散事件模拟。当我将所有日期转换为整数时(seconds
中的相对时间),我认为模拟 运行 快得多。
最好的方法是什么,以明确定义的方式在 date
和 seconds
之间切换
- 手动设置参考时间(例如
"1970-01-01 00:00:00 GMT"
或"2016-01-01 00:00:00 GMT"
), - 时区和
- 来源(在
lubridate
中不可能?)
我想我可以使用 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
.