无法将日期时间与am / pm从字符转换为整数

时间:2017-07-26 20:20:09

标签: r strptime

从csv文件上传日期时间数据后,我可以看到日期时间为am / pm但是它是字符格式,因此无法添加回归线。 当尝试使用stprtime转换为整数时,我创建了一个现在是整数的新列,但是它丢失了am / pm信息。我如何保留这些信息?

示例数据“wpplot”:

    Date    Irrigation  Rep ID  WP
6/29/17 12:40 PM    Reduced 1   11B -14.3
6/29/17 12:50 PM    Reduced 1   11B -14.4
6/29/17 1:00 AM Reduced 1   11B -14.5
6/29/17 1:10 AM Reduced 1   11B -14.5
6/29/17 1:20 AM Reduced 1   11B -14.5
6/29/17 1:30 AM Reduced 1   11B -14.5
6/29/17 1:40 AM Reduced 1   11B -14.5
6/29/17 1:50 AM Reduced 1   11B -14.5
6/29/17 2:00 AM Reduced 1   11B -14.5
6/29/17 2:10 AM Reduced 1   11B -14.5
6/29/17 2:20 AM Reduced 1   11B -14.5
6/29/17 2:30 AM Reduced 1   11B -14.5

代码:

attach(wpplot)
wpplot$datefinish<-strptime(wpplot$Date, format = "%m/%d/%y %H:%M %p")

更新

在使用strptime时,我无法辨别am / pm。语言环境设置为English_United States(操作系统是Windows)。

> Sys.getlocale("LC_TIME") 
[1] "English_United States.1252"
> 
> Sys.setlocale("LC_TIME", "English")
[1] "English_United States.1252" 
wpplot$datefinish<-strptime(wpplot$Date, format = "%m/%d/%y %I:%M %p")
> datefinish
[1] "2017-06-29 12:40:00 PDT" "2017-06-29 12:50:00 PDT" 
"2017-06-29 01:00:00 PDT" "2017-06-29 01:10:00 PDT"

1 个答案:

答案 0 :(得分:0)

am / pm格式仅在小写时才有效,而不是像你的例子那样在AM / PM中。另请注意,我已将%H更改为%I,如?strptime中所示。

以下为我做了诀窍。

wpplot$Date       <- tolower(wpplot$Date)
wpplot$datefinish <- strptime(wpplot$Date, format = "%m/%d/%y %I:%M %p")

但是,在文档中,它还指出AM / PM行为是特定于语言环境的:

  

在适当和可用的情况下使用与字符串相关的特定于语言环境的转换。这会通过LC_TIME区域设置类别的设置影响日期和月份的名称,AM / PM指示符(如果使用)和格式(如%x和%X)的分隔符。

更新

我们可以稍微改变时间,以确保我们正确理解上午/下午的概念(下午12:40或午夜过后?)。

wpplot$Date[1] <- "6/29/17 02:40 pm"  # This is definitely 14:40 29th of June

# CORRECT:
strptime(wpplot$Date, format = "%m/%d/%y %I:%M %p")
# [1] "2017-06-29 14:40:00 CEST" "2017-06-29 12:50:00 CEST"
# [3] "2017-06-29 01:00:00 CEST" "2017-06-29 01:10:00 CEST"
# [5] "2017-06-29 01:20:00 CEST"

请注意,我使用的是format = "%m/%d/%y %I:%M %p"而不是format = "%m/%d/%y %H:%M %p"

# WRONG
strptime(wpplot$Date, format = "%m/%d/%y %H:%M %p")
# [1] "2017-06-29 02:40:00 CEST" "2017-06-29 12:50:00 CEST"
# [3] "2017-06-29 01:00:00 CEST" "2017-06-29 01:10:00 CEST"
# [5] "2017-06-29 01:20:00 CEST"