如何将十进制转换为POSIX时间

5

我使用这里的函数来计算日出和日落时间,它返回:

         sunrise           sunset
6.49055593325792 18.2873900837081

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

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


6.49055593325792和18.2873900837081具体代表什么?小数点后的数字代表什么意思? - CHP
你尝试过什么了吗?你具体是在哪里遇到困难呢? - Justin
2
我敢打赌现在已经是午夜过后的几个小时了。我还敢打赌,作者所说的“real”并不是指变量类型,而是指真正的人类读取时间的方式。 - nograpes
3个回答

17

@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"

那将会给你秒数。


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"

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")

大家好,我尝试了所有的解决方案,都非常有效!!!然而,我对 nograpes 提出的快速、简单和易于实现的解决方案印象深刻!我非常感谢所有的帮助者!!!Stef - stefano
@stefano 如果您喜欢这个答案,请在旁边点击勾选。 - nograpes
@stefano 我想nograpes指的是您尚未在StackOverflow上通过点击复选标记选择“最佳答案”,因此他没有获得被选为答案的信誉。 - Dinre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接