4

我从这里使用一个函数来计算日出和日落,它返回:

         sunrise           sunset
6.49055593325792 18.2873900837081

我正在努力(尝试使用strftimePOSIXctas.Date函数)将其转换为实时,但到目前为止没有成功。

与往常一样,非常感谢任何建议。

4

3 回答 3

16

@Arun 的策略有效,但这样做可能更容易:

x <- c(6.49055593325792, 18.2873900837081)
today<-as.POSIXct('2012-01-23 00:00:00 EST')
today + (3600*x)

# "2012-01-23 06:29:26 EST" "2012-01-23 18:17:14 EST"

这也会让你获得秒数。

于 2013-01-23T16:07:16.250 回答
7

首先将十进制表示转换为小时和分钟(如果我理解正确的话)

x <- c(6.49055593325792, 18.2873900837081)
# if 6.49 equals 6.49 hours, then do this.
x.m <- paste(floor(x), round((x-floor(x))*60), sep=":")

> x.m
# [1] "6:29"  "18:17"

> strptime(x.m, format="%H:%M")    
# [1] "2013-01-23 06:29:00" "2013-01-23 18:17:00"
于 2013-01-23T15:58:34.250 回答
2

这实际上取决于您希望在转换后对“实时”执行什么操作,但我将假设您只想要您正在使用的 [suncalc] 函数的格式化输出以提高可读性。

如果您只想将时间以 24 小时/12 小时格式显示为字符串,您可以将这些行中的任何一行附加到 [suncalc] 函数的末尾,就在 'return' 语句之前:

# Use these two lines for 24-hour format
sunrise <- format(as.POSIXct(sunrise*3600, origin="2001-01-01", "GMT"), "%H:%M")
sunset <- format(as.POSIXct(sunset*3600, origin="2001-01-01", "GMT"), "%H:%M")

# Use these two lines for 12-hour format (AM/PM)
sunrise <- format(as.POSIXct(sunrise*3600, origin="2001-01-01", "GMT"), "%I:%M %p")
sunset <- format(as.POSIXct(sunset*3600, origin="2001-01-01", "GMT"), "%I:%M %p")
于 2013-01-23T19:36:01.253 回答