如果时间介于 12 小时和 24 小时之间,如何转换字符日期时间?

How to convert character date time if time mixed between 12 hour and 24 hour time?

我从各种 .csv 文件中读取了大量数据(使用 read_csv)。文件中读取的日期时间列被读取为 class 字符。我需要将此字符列转换为实际日期时间(并检查重复项)以用于绘图目的。这变得很有趣,因为日期不是始终采用 12 小时或 24 小时格式。时区也不一致,但我想我的工作正常。

我对 R 比较陌生,会接受任何积极的建议。

这就是我目前正在尝试的方式:

# Add time zone information:
    # Some data uses 12-hour clock:
    if (sum(grep("AM", Data$Date))||sum(grep("PM", Data$Date))>0){
      if (Time_Zone == "Eastern Daylight Time"){
        Data$Date_Formatted <- as.POSIXct(Data$Date, "%m/%d/%Y %H:%M:%S", tz = "America/New_York")
        Data$Date_Formatted2 <- as.POSIXlt(Data$Date, "%m/%d/%Y %H:%M:%S", tz = "America/New_York")
      }
      else if (Time_Zone == "Central Daylight Time" || Time_Zone == "Central Standard Time") {
        Data$Date_Formatted <- as.POSIXct(Data$Date, "%m/%d/%Y %H:%M:%S", tz = "America/Chicago")
        Data$Date_Formatted2 <- as.POSIXlt(Data$Date, "%m/%d/%Y %H:%M:%S", tz = "America/Chicago")
      }
    }
    # Other data uses a 24-hour clock:
    else{
      if (Time_Zone == "Eastern Daylight Time"){
        Data$Date_Formatted <- as.POSIXct(Data$Date, "%m/%d/%Y %k", tz = "America/New_York")
        Data$Date_Formatted2 <- as.POSIXlt(Data$Date, "%m/%d/%Y %k", tz = "America/New_York")
      }
      else if (Time_Zone == "Central Daylight Time" || Time_Zone == "Central Standard Time") {
        Data$Date_Formatted <- as.POSIXct(Data$Date, "%m/%d/%Y %k", tz = "America/Chicago")
        Data$Date_Formatted2 <- as.POSIXlt(Data$Date, "%m/%d/%Y %k", tz = "America/Chicago")
      }
    }

我不确定 POSIXct 和 POSIXlt 之间的区别是什么,并且找到了另一个使用两者的线程...所以我做了...不过我认为这没有必要。

12 小时的解决方案似乎工作得很好,但 24 小时的格式肯定是不正确的。

试试 lubridate,这是一个非常强大的日期和时间包:

library(lubridate)

ymd_hms(c("2019-01-20 10:25:00 PM", "2019-01-20 22:25:00"))
[1] "2019-01-20 22:25:00 UTC" "2019-01-20 22:25:00 UTC"

检查 ?ymd_hms 以获得更多选项。