2015-07-10 2 views
0

У меня есть вектор символов дат, которые я бы хотел преобразовать в другой часовой пояс.Даты возвращаются как секунды

pubdate 
[1] "Fri, 10 Jul 2015 03:21:23 +0000" "Fri, 10 Jul 2015 03:04:55 +0000" 
[3] "Thu, 09 Jul 2015 23:49:01 +0000" "Thu, 09 Jul 2015 23:30:37 +0000" 
[5] "Thu, 09 Jul 2015 23:27:44 +0000" "Thu, 09 Jul 2015 23:16:46 +0000" 
[7] "Thu, 09 Jul 2015 23:14:06 +0000" "Thu, 09 Jul 2015 23:10:20 +0000" 
[9] "Thu, 09 Jul 2015 23:07:52 +0000" "Thu, 09 Jul 2015 22:37:41 +0000" 
[11] "Thu, 09 Jul 2015 22:35:06 +0000" 

Я создал функцию для этого.

temp <- as.matrix(0) 

    for (i in 1:length(pubdate)){ 
      tmp_dta <- strptime(pubdate[[i]],format="%a, %d %b %Y %H:%M:%S", tz="GMT") 
      tmp_dta$hour <- tmp_dta$hour - 1 
      tmp_dta <- as.POSIXct(tmp_dta) 
      attributes(tmp_dta)$tzone <- "Asia/Manila" 
      temp[i] <- tmp_dta 

    } 

Однако, когда я пытался распечатать временные данные, кажется, что они возвращают количество секунд. Здесь

> temp 
[1] 1436494883 1436493895 1436482141 1436481037 1436480864 1436480206 1436480046 1436479820 
[9] 1436479672 1436477861 1436477706 

Могу ли я узнать, как я могу изменить его, чтобы вернуться как даты? пример: «2015-07-10 10:21:23 PHT»

Спасибо!

ОБНОВЛЕНО: Как предложил Nicola ниже, я удалил цикл и добавил его предлагаемый код. Ниже код работает:

tmp_dta <- strptime(pubdate,format="%a, %d %b %Y %H:%M:%S", tz="GMT") 

    x <- as.POSIXct(tmp_dta) 

    attributes(x)$tzone <- "Asia/Manila" 

    newpubdate <- x - 3600 
+0

Try 'as.POSIXct (1436494883, происхождение = "1970-01-01", TZ = "Asia/Manila")' – lukeA

+0

Не нужно зацикливаться. Просто попробуйте 'as.POSIXct (pubdate, format ="% a,% d% b% Y% H:% M:% S% z ", tz =" Asia/Manila ")' – nicola

+0

Спасибо @lukea и @nicola! – dixi

ответ

0

Вы можете сделать всю операцию в одной строке:

pubdate <- c("Fri, 10 Jul 2015 03:21:23 +0000" ,"Fri, 10 Jul 2015 03:04:55 +0000","Thu, 09 Jul 2015 23:49:01 +0000", "Thu, 09 Jul 2015 23:30:37 +0000","Thu, 09 Jul 2015 23:27:44 +0000", "Thu, 09 Jul 2015 23:16:46 +0000","Thu, 09 Jul 2015 23:14:06 +0000","Thu, 09 Jul 2015 23:10:20 +0000", "Thu, 09 Jul 2015 23:07:52 +0000", "Thu, 09 Jul 2015 22:37:41 +0000","Thu, 09 Jul 2015 22:35:06 +0000") 
strptime(pubdate,"%a, %d %b %Y %H:%M:%S %z",tz="Asia/Manila") 
# [1] "2015-07-10 11:21:23 PHT" "2015-07-10 11:04:55 PHT" "2015-07-10 07:49:01 PHT" "2015-07-10 07:30:37 PHT" "2015-07-10 07:27:44 PHT" "2015-07-10 07:16:46 PHT" "2015-07-10 07:14:06 PHT" "2015-07-10 07:10:20 PHT" 
# [9] "2015-07-10 07:07:52 PHT" "2015-07-10 06:37:41 PHT" "2015-07-10 06:35:06 PHT" 

Если вы думаете, есть один час несоответствие (которое я не думаю, что есть: есть вы думали о переходе на летнее время), то, как @nicola предложил:

strptime(pubdate,"%a, %d %b %Y %H:%M:%S %z",tz="Asia/Manila") - as.difftime(1,unit="hours") 
# [1] "2015-07-10 10:21:23 PHT" "2015-07-10 10:04:55 PHT" "2015-07-10 06:49:01 PHT" "2015-07-10 06:30:37 PHT" "2015-07-10 06:27:44 PHT" "2015-07-10 06:16:46 PHT" "2015-07-10 06:14:06 PHT" "2015-07-10 06:10:20 PHT" 
# [9] "2015-07-10 06:07:52 PHT" "2015-07-10 05:37:41 PHT" "2015-07-10 05:35:06 PHT" 
Смежные вопросы