将POSIXt时间转换为儒略日

时间:2020-09-29 19:00:28

标签: r date transform posixct

我一直在寻找将POSIXct格式的日期转换为儒略日的方法 _ 朱利安天数(JDN)是从世界时正午开始在朱利安天数中分配给整个太阳日的整数,朱利安天数0则分配给公元前4713年1月1日星期一中午开始的那一天。日历(公元前4714年11月24日,阳历) _

但是我只是想出了如何使一年的一天-leap年从1到365。 有人可以帮我找到一些将POSIXct日期(例如:2010-10-02 21:00:00)转换为儒略日期的功能吗?

我在数据框上有一列,其中包含几个要转换为儒略日的日期。

head(head(all_jub2$timestamp_adjusted)
[1] 2010-10-02 21:00:00 2010-10-03 03:00:00 2010-10-03 09:00:00 2010-10-03 15:00:00
[5] 2010-10-03 21:00:00 2010-10-04 03:00:00
6120 Levels: 2003-10-17 21:00:00 2003-10-18 03:00:00 ... 2020-01-10 09:00:00

3 个答案:

答案 0 :(得分:0)

只要您从正确的位置开始,就可以使用基数R 来完成此操作。您问题中的文本数据仍然是factor型变量。这样做不好–您需要解析它,例如anytime包的anytime()函数可以为您提供帮助。在此查看其他问题。

回到问题。如果您从当前时间开始使用POSIXct变量,并且为了一个小时前的参数而拥有向量,我们可以a)将其转换为Date,然后b)从Date转换为a朱利安:

R> input <- Sys.time() + c(-3600,0)
R> input
[1] "2020-09-29 13:07:50.225898 CDT" "2020-09-29 14:07:50.225898 CDT"
R> as.Date(input)
[1] "2020-09-29" "2020-09-29"
R> julian(as.Date(input))
[1] 18534 18534
attr(,"origin")
[1] "1970-01-01"
R> 

因此,今天我们的儒略日期是18534。对于您的前两个数据点,我们得到14884和14885。

R> input <- c("2010-10-02 21:00:00", "2010-10-03 03:00:00")
R> anytime::anydate(input)
[1] "2010-10-02" "2010-10-03"
R> julian(anytime::anydate(input))
[1] 14884 14885
attr(,"tzone")
[1] "America/Chicago"
attr(,"origin")
[1] "1970-01-01"
R> 

如果您只想在一年中的某一天,则将其作为yday表示形式的组成部分POSIXlt ,但由于它为零,因此需要调整一个根据:

R> as.POSIXlt(anytime::anytime(input))$yday + 1
[1] 275 276
R> 

答案 1 :(得分:0)

lubridate软件包使处理日期变得容易。这样可以解决您的问题吗?

library(lubridate)

date <- as.POSIXct('2010-10-02 21:00:00')

julian <- yday(date)

答案 2 :(得分:0)

感谢您的回答,但我发现使用insol软件包一直在寻找什么?

library(insol)

julian_day <- insol::JD(as.POSIXct('2010-10-02 21:00:00'))
[1] 2455473