【问题标题】:How to convert character date time if time mixed between 12 hour and 24 hour time?如果时间在 12 小时和 24 小时之间混合,如何转换字符日期时间?
【发布时间】:2020-01-14 20:55:40
【问题描述】:

我从各种 .csv 文件(使用 read_csv)中读取了大量数据。在文件中读取的 Datetime 列作为类字符读取。出于绘图目的,我需要将此字符列转换为实际日期时间(并检查重复项)。这很有趣,因为日期并非始终采用 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 小时格式肯定仍然不正确。

【问题讨论】:

  • 你能提供一些示例数据吗?

标签: r datetime posixct


【解决方案1】:

试试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 了解更多选项。

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 2021-12-24
    • 2023-03-30
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多