Как преобразовать строки в datetime [duplicate]

HTML5 replaceState - это ответ, как уже упоминалось Vivart и geo1701. Однако он не поддерживается во всех браузерах / версиях. History.js обертывает функции состояния HTML5 и предоставляет дополнительную поддержку браузерам HTML4.

7
задан santoku 21 September 2014 в 15:59
поделиться

2 ответа

Как заметил @Richard Scriven, вы не должны использовать as.Date, потому что это не класс datetime . Вот несколько разных способов:

DateTime <- "2007-02-01 00:00:00"
DateTime2 <- "02/01/2007 00:06:10"
## default format Y-m-d H:M:S
> as.POSIXct(DateTime,tz=Sys.timezone())
[1] "2007-02-01 EST"
> as.POSIXlt(DateTime,tz=Sys.timezone())
[1] "2007-02-01 EST"
##
## specify format m/d/Y H:M:S
> as.POSIXct(DateTime2,format="%m/%d/%Y %H:%M:%S",tz=Sys.timezone())
[1] "2007-02-01 00:06:10 EST"
> as.POSIXlt(DateTime2,format="%m/%d/%Y %H:%M:%S",tz=Sys.timezone())
[1] "2007-02-01 00:06:10 EST"
##
## using lubridate
library(lubridate)
> ymd_hms(DateTime,tz=Sys.timezone())
[1] "2007-02-01 EST"
> mdy_hms(DateTime2,tz=Sys.timezone())
[1] "2007-02-01 00:06:10 EST"

Если у вас есть формат %Y-%m-%d %H:%M:%S, вам не нужно указывать format= для as.POSIXct и as.POSIXlt. В других случаях, например %m/%d/%Y %H:%M:%S, вы обычно должны явно указывать формат.

8
ответ дан nrussell 17 August 2018 в 08:49
поделиться
  • 1
    Я могу ошибаться. Но мне кажется, что OP хочет сохранить дату и время, как они есть в строке. 2007-02-01 EST может быть не тот, которого хочет OP, так как он не содержит 00:00:00 в результатах. – jazzurro 21 September 2014 в 16:32
  • 2
    Хм, это справедливо. Я знаю, что если у вас есть datetime с 00:00:00 и другое datetime с ненулевым HMS в data.frame и т. Д., Он печатает нули - i.e data.frame(x=c(as.POSIXct(DateTime,tz=Sys.timezone()),as.POSIXct(DateTime,tz=Sys.timezone())+1)) (используя объекты выше); Я посмотрю, есть ли способ сделать это с помощью отдельных временных меток. – nrussell 21 September 2014 в 16:44
  • 3
    Благодаря! кажется, в формате DateTime hms не отображается, но в формате DateTime2 это так. – santoku 21 September 2014 в 17:01
  • 4
    Правильно - это происходит только с полуночью (00:00:00) - и она по-прежнему сохраняет информацию (она просто не печатает ее). Он показывает нули, если вы просматриваете такую ​​временную метку с другими не-полночными временами, как в моем комментарии выше, иначе вы должны взломать форматирование, чтобы обойти это поведение, например, в решении @ jazzurro. – nrussell 21 September 2014 в 17:04
  • 5
    Если вы не найдете его в документации, я думаю, что это был бы очень хороший вопрос. Например, при загрузке lubridate попробуйте dt <- as.POSIXct("2007-02-01 00:00:00"); hour(dt) <- hour(dt)+1; dt; hour(dt) <- hour(dt)-1; dt. Полночь, кажется, никогда не появляется – Rich Scriven 21 September 2014 в 18:02

Если вы хотите специально преобразовать «2007-02-01 00:00:00» в объект класса даты, это то, что вам нужно сделать. Это основано на этом вопросе и ответе

print.POSIXct <- function(x,...)print(format(x,"%Y-%m-%d %H:%M:%S"))
x <- "2007-02-01 00:00:00"
x <- as.POSIXct(x,tz=Sys.timezone())
x
1
ответ дан Community 17 August 2018 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: