【问题标题】:How to extract Hour (in UTC time) from datetime如何从日期时间中提取小时(UTC 时间)
【发布时间】:2019-10-31 16:10:15
【问题描述】:

鉴于当地时间 fromLocalTimestate 我想创建一个标题为 hourUTC 的列,它只返回小时(在 UTC 时间)

所以给定数据:

> dput(head(smart1,10))
structure(list(fromLocalTime = structure(c(1567086360, 1567604820, 
1568037120, 1571344680, 1565797140, 1568641740, 1565983980, 1567100520, 
1569963060, 1563888180), class = c("POSIXct", "POSIXt"), tzone = ""), 
    state = c("GA", "GA", "GA", "GA", "TX", "TX", "TX", "TX", 
    "TX", "FL")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-10L))
> data.frame(smart1)
         fromLocalTime state
1  2019-08-29 09:46:00    GA
2  2019-09-04 09:47:00    GA
3  2019-09-09 09:52:00    GA
4  2019-10-17 16:38:00    GA
5  2019-08-14 11:39:00    TX
6  2019-09-16 09:49:00    TX
7  2019-08-16 15:33:00    TX
8  2019-08-29 13:42:00    TX
9  2019-10-01 16:51:00    TX
10 2019-07-23 09:23:00    FL

我想要这样的输出:

> data.frame(smart1)
         fromLocalTime state hourUTC
1  2019-08-29 09:46:00    GA      13
2  2019-09-04 09:47:00    GA      13
3  2019-09-09 09:52:00    GA      13
4  2019-10-17 16:38:00    GA      20
5  2019-08-14 11:39:00    TX      16
6  2019-09-16 09:49:00    TX      14
7  2019-08-16 15:33:00    TX      20
8  2019-08-29 13:42:00    TX      18
9  2019-10-01 16:51:00    TX      21
10 2019-07-23 09:23:00    FL      13

在 excel 中,我使用此公式根据状态获取时区。我知道这不是包罗万象的,但对于我的数据来说,这就足够了: =if(ISNUMBER(SEARCH(A1,"WA,OR,CA,NV")),"太平洋",if(ISNUMBER(SEARCH(A1,"MT,ID,WY,UT,CO,AZ,NM")) ,"山",if(ISNUMBER(搜索(A1,"ND,SD,NE,KS,OK,TX,MN,IA,MO,AR,LA,WI,IL,TN,MS,AL"))," Central",if(ISNUMBER(SEARCH(A1,"MI,IN,OH,PA,NY,VT,ME,NH,MA,RI,CT,KY,NJ,DE,MD,WV,VA,NC,SC, GA,FL,DC")),"东部",if(ISNUMBER(SEARCH(A1,"AK")),"阿拉斯加",if(ISNUMBER(SEARCH(A1,"HI")),"夏威夷"," ")))))))

【问题讨论】:

  • 时区不是由州决定的。像肯塔基这样的地方有两个不同的时区。您不能仅使用该信息唯一地转换为 UTC。您必须建立自己的表格,说明您希望为每个州改变时间的小时数。
  • @MrFlick 我想是真的。我将使用我用来“通常”从该网站alexsappsdev.blogspot.com/2014/03/… 获取每个州的大部分状态的 excel 公式来更新问题

标签: r time


【解决方案1】:

使用您提供的表格,如果您只是想近似(而不是担心夏令时),您可以执行类似的操作

smart1 %>% mutate(
  approxUTC = lubridate::hour(fromLocalTime) + case_when(
      state %in% c("WA","OR","CA","NV")~8,
      state %in% c("MT","ID","WY","UT","CO","AZ","NM")~7,
      state %in% c("ND","SD","NE","KS","OK","TX","MN","IA","MO","AR","LA","WI","IL","TN","MS","AL")~6,
      state %in% c("MI","IN","OH","PA","NY","VT","ME","NH","MA","RI","CT","KY","NJ","DE","MD","WV","VA","NC","SC","GA","FL","DC")~5,
      state %in% c("AK")~9,
      state %in% c("HI")~10,
      TRUE ~ NA_real_))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多