简体   繁体   English

如何在没有上午或下午信息的情况下将 12 小时制转换为 24 小时制?

[英]How do I convert 12-hour to 24-hour time without info on AM or PM?

I received from data from a stream flow data logger but the time is recorded in 12-hour time without information on AM or PM.我从 stream 流量数据记录器收到数据,但时间以 12 小时时间记录,没有上午或下午的信息。 I can infer by looking at the order of the times whether it is AM or PM but I need to convert them to 24-hour time.我可以通过查看时间顺序来推断是上午还是下午,但我需要将它们转换为 24 小时制。

I have other logger data that uses 24-hour time so I need to make sure they match.我有其他使用 24 小时时间的记录器数据,因此我需要确保它们匹配。 I used the as.POSIXct() to format all the other data but I am having issues with this particular set.我使用 as.POSIXct() 来格式化所有其他数据,但我遇到了这个特定数据集的问题。

I am using R for this analysis.我正在使用 R 进行此分析。

Here is what the data look like:以下是数据的样子:

          Date_Time    PT.Level
2008-11-21 11:40:00      0.7502
2008-11-21 11:45:00      0.7502
2008-11-21 11:50:00      0.7480
2008-11-21 11:55:00      0.7458
2008-11-22 12:00:00      0.7458
2008-11-22 12:05:00      0.7436
2008-11-22 12:05:42          NA
2008-11-22 12:10:00      0.7436
2008-11-22 12:15:00      0.7414
#             [...]       [...]
2008-11-22 11:45:00      0.7304
2008-11-22 11:50:00      0.7304
2008-11-22 11:55:00      0.7304
2008-11-22 12:00:00      0.7282
2008-11-22 12:00:43          NA
2008-11-22 12:05:00      0.7282
2008-11-22 12:10:00      0.7282
2008-11-22 12:15:00      0.7282

Any suggestions?有什么建议么?

Using ave with cumsum .avecumsum一起使用。 If there's no switch within a day, we need case handling using table .如果一天之内没有 switch,我们需要使用table处理案例。 For duplicated hours we may set diff == 0 to FALSE .对于重复的时间,我们可以将diff == 0设置为FALSE

I don't know how complete your data is, but this should work if there are no dupes and always 00:00 and 12:00 is available each day.我不知道您的数据有多完整,但是如果没有欺骗,并且每天总是00:0012:00可用,这应该可以工作。

v2 <- ave(as.numeric(substr(v1, 12, 13)) %% 12 == 0, as.Date(v1), FUN=function(x) {
  if (length(table(x)) == 1) 2
  else {
    x[c(1, diff(x)) == 0] <- FALSE
    cumsum(x)
  }
})
v2 <- c("AM", "PM")[v2]

Result结果

cbind.data.frame(v, v1, v2)

#                      v                  v1 v2
# 1  2020-05-22 22:00:00 2020-05-22 10:00:00 PM
# 2  2020-05-22 23:00:00 2020-05-22 11:00:00 PM
# 3  2020-05-23 00:00:00 2020-05-23 12:00:00 AM
# 4  2020-05-23 00:01:00 2020-05-23 12:01:00 AM  ## duplicated 12 stays AM
# 5  2020-05-23 00:59:00 2020-05-23 12:59:00 AM  ## duplicated 12 stays AM
# 6  2020-05-23 01:00:00 2020-05-23 01:00:00 AM
# 7  2020-05-23 02:00:00 2020-05-23 02:00:00 AM
# 8  2020-05-23 03:00:00 2020-05-23 03:00:00 AM
# 9  2020-05-23 04:00:00 2020-05-23 04:00:00 AM
# 10 2020-05-23 05:00:00 2020-05-23 05:00:00 AM
# 11 2020-05-23 06:00:00 2020-05-23 06:00:00 AM
# 12 2020-05-23 07:00:00 2020-05-23 07:00:00 AM
# 13 2020-05-23 08:00:00 2020-05-23 08:00:00 AM
# 14 2020-05-23 09:00:00 2020-05-23 09:00:00 AM
# 15 2020-05-23 10:00:00 2020-05-23 10:00:00 AM
# 16 2020-05-23 11:00:00 2020-05-23 11:00:00 AM
# 17 2020-05-23 12:00:00 2020-05-23 12:00:00 PM
# 18 2020-05-23 13:00:00 2020-05-23 01:00:00 PM
# 19 2020-05-23 14:00:00 2020-05-23 02:00:00 PM
# 20 2020-05-23 15:00:00 2020-05-23 03:00:00 PM
# 21 2020-05-23 16:00:00 2020-05-23 04:00:00 PM
# 22 2020-05-23 17:00:00 2020-05-23 05:00:00 PM
# 23 2020-05-23 18:00:00 2020-05-23 06:00:00 PM
# 24 2020-05-23 19:00:00 2020-05-23 07:00:00 PM
# 25 2020-05-23 20:00:00 2020-05-23 08:00:00 PM
# 26 2020-05-23 21:00:00 2020-05-23 09:00:00 PM
# 27 2020-05-23 22:00:00 2020-05-23 10:00:00 PM
# 28 2020-05-23 23:00:00 2020-05-23 11:00:00 PM
# 29 2020-05-24 00:00:00 2020-05-24 12:00:00 AM
# 30 2020-05-24 01:00:00 2020-05-24 01:00:00 AM
# 31 2020-05-24 02:00:00 2020-05-24 02:00:00 AM
# 32 2020-05-24 03:00:00 2020-05-24 03:00:00 AM
# 33 2020-05-24 04:00:00 2020-05-24 04:00:00 AM
# 34 2020-05-24 05:00:00 2020-05-24 05:00:00 AM
# 35 2020-05-24 06:00:00 2020-05-24 06:00:00 AM
# 36 2020-05-24 07:00:00 2020-05-24 07:00:00 AM
# 37 2020-05-24 08:00:00 2020-05-24 08:00:00 AM
# 38 2020-05-24 09:00:00 2020-05-24 09:00:00 AM
# 39 2020-05-24 10:00:00 2020-05-24 10:00:00 AM
# 40 2020-05-24 11:00:00 2020-05-24 11:00:00 AM
# 41 2020-05-24 12:00:00 2020-05-24 12:00:00 PM
# 42 2020-05-24 13:00:00 2020-05-24 01:00:00 PM
# 43 2020-05-24 14:00:00 2020-05-24 02:00:00 PM
# 44 2020-05-24 15:00:00 2020-05-24 03:00:00 PM
# 45 2020-05-24 16:00:00 2020-05-24 04:00:00 PM
# 46 2020-05-24 17:00:00 2020-05-24 05:00:00 PM
# 47 2020-05-24 18:00:00 2020-05-24 06:00:00 PM
# 48 2020-05-24 19:00:00 2020-05-24 07:00:00 PM
# 49 2020-05-24 20:00:00 2020-05-24 08:00:00 PM
# 50 2020-05-24 21:00:00 2020-05-24 09:00:00 PM

##Result

    cbind.data.frame(v, v1, v2)

[]()

    #                      v               v1 v2
    # 1  2020-05-22 22:00:00 2020-05-22 10:00 PM
    # 2  2020-05-22 23:00:00 2020-05-22 11:00 PM
    # 3  2020-05-23 00:00:00 2020-05-23 12:00 AM
    # 4  2020-05-23 01:00:00 2020-05-23 01:00 AM
    # 5  2020-05-23 02:00:00 2020-05-23 02:00 AM
    # 6  2020-05-23 03:00:00 2020-05-23 03:00 AM
    # 7  2020-05-23 04:00:00 2020-05-23 04:00 AM
    # 8  2020-05-23 05:00:00 2020-05-23 05:00 AM
    # 9  2020-05-23 06:00:00 2020-05-23 06:00 AM
    # 10 2020-05-23 07:00:00 2020-05-23 07:00 AM
    # 11 2020-05-23 08:00:00 2020-05-23 08:00 AM
    # 12 2020-05-23 09:00:00 2020-05-23 09:00 AM
    # 13 2020-05-23 10:00:00 2020-05-23 10:00 AM
    # 14 2020-05-23 11:00:00 2020-05-23 11:00 AM
    # 15 2020-05-23 12:00:00 2020-05-23 12:00 PM
    # 16 2020-05-23 13:00:00 2020-05-23 01:00 PM
    # 17 2020-05-23 14:00:00 2020-05-23 02:00 PM
    # 18 2020-05-23 15:00:00 2020-05-23 03:00 PM
    # 19 2020-05-23 16:00:00 2020-05-23 04:00 PM
    # 20 2020-05-23 17:00:00 2020-05-23 05:00 PM
    # 21 2020-05-23 18:00:00 2020-05-23 06:00 PM
    # 22 2020-05-23 19:00:00 2020-05-23 07:00 PM
    # 23 2020-05-23 20:00:00 2020-05-23 08:00 PM
    # 24 2020-05-23 21:00:00 2020-05-23 09:00 PM
    # 25 2020-05-23 22:00:00 2020-05-23 10:00 PM
    # 26 2020-05-23 23:00:00 2020-05-23 11:00 PM
    # 27 2020-05-24 00:00:00 2020-05-24 12:00 AM
    # 28 2020-05-24 01:00:00 2020-05-24 01:00 AM
    # 29 2020-05-24 02:00:00 2020-05-24 02:00 AM
    # 30 2020-05-24 03:00:00 2020-05-24 03:00 AM
    # 31 2020-05-24 04:00:00 2020-05-24 04:00 AM
    # 32 2020-05-24 05:00:00 2020-05-24 05:00 AM
    # 33 2020-05-24 06:00:00 2020-05-24 06:00 AM
    # 34 2020-05-24 07:00:00 2020-05-24 07:00 AM
    # 35 2020-05-24 08:00:00 2020-05-24 08:00 AM
    # 36 2020-05-24 09:00:00 2020-05-24 09:00 AM
    # 37 2020-05-24 10:00:00 2020-05-24 10:00 AM
    # 38 2020-05-24 11:00:00 2020-05-24 11:00 AM
    # 39 2020-05-24 12:00:00 2020-05-24 12:00 PM
    # 40 2020-05-24 13:00:00 2020-05-24 01:00 PM
    # 41 2020-05-24 14:00:00 2020-05-24 02:00 PM
    # 42 2020-05-24 15:00:00 2020-05-24 03:00 PM
    # 43 2020-05-24 16:00:00 2020-05-24 04:00 PM
    # 44 2020-05-24 17:00:00 2020-05-24 05:00 PM
    # 45 2020-05-24 18:00:00 2020-05-24 06:00 PM
    # 46 2020-05-24 19:00:00 2020-05-24 07:00 PM
    # 47 2020-05-24 20:00:00 2020-05-24 08:00 PM
    # 48 2020-05-24 21:00:00 2020-05-24 09:00 PM

I think this can easily be scaled up to minutes and seconds, I don't want to spoil your fun:)我认为这可以很容易地扩展到分钟和秒,我不想破坏你的乐趣:)


Data:数据:

v <- as.POSIXct(sapply(1:48, function(x) 1590174000 + x*60*60),
           origin="1970-01-01")
v <- c(v[1:3], v[3]+60, v[3]+60*59, v[4:length(v)])  ## duplicate some 12 o'clocks
v1 <- format(v, "%Y-%m-%d %I:%M:%S")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM