Изменение формата даты!

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
garrik_igorek
Новоприбывший
Сообщения: 9
Зарегистрирован: 12 мар 2016, 14:04
Репутация: 0

Изменение формата даты!

Сообщение garrik_igorek » 17 окт 2016, 16:58

Добрый день, помогите пожалуйста со следующей проблемой.

В csv есть даты в следующем формате "2016-07-16 03:49:48.000" , а нужно в таком "2016-07-16T00:00:00Z" , НО только что бы еще и секунды выводил.

Всё это дело делаю в Azure ml studio, там написал следующий скрипт:

Код: Выделить всё

timeformat <- "%Y-%m-%d"

data$BegDate <- as.POSIXct(as.numeric(as.POSIXct(data$BegDate, format = timeformat, tz = "UTC", origin = "1970-01-01"), tz = "UTC"), tz = "UTC", origin = "1970-01-01")
Он делает из такой даты "2016-07-16 03:49:48.000" такую "2016-07-16T00:00:00Z" опуская при этом часы, минуты и секунды, а их нужно оставить.

Помогите пожалуйста).

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: Изменение формата даты!

Сообщение freeExec » 18 окт 2016, 11:02

Так может timeformat надо расширить до %h:%m:%s

garrik_igorek
Новоприбывший
Сообщения: 9
Зарегистрирован: 12 мар 2016, 14:04
Репутация: 0

Re: Изменение формата даты!

Сообщение garrik_igorek » 18 окт 2016, 14:04

пробовал с таким форматом

Код: Выделить всё

"%Y-%m-%d %h:%m:%s"
не работает так

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: Изменение формата даты!

Сообщение nickleb » 18 окт 2016, 15:09

Не знаю как в Azure, но в R попробовал и вот так многострочно, но наверняка:

Код: Выделить всё

dt <- as.character("2016-07-16 03:49:48.000")

YYYYdt <- substr(dt, 1, 4)
MMdt   <- substr(dt, 6, 7)
DDdt   <- substr(dt, 9, 10)

HHdt <- substr(dt, 12, 13)
mmdt <- substr(dt, 15, 16)
SSdt <- substr(dt, 18, 19)

#ISOdatetime
dtISO <- ISOdatetime(YYYYdt, MMdt, DDdt, HHdt, mmdt, SSdt, "GMT")
dtISO

#string dtISO
stringdtISO <- paste(YYYYdt, "-" , MMdt, "-", DDdt, "T", HHdt, ":", mmdt, ":", SSdt, "Z", sep="")
stringdtISO

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: Изменение формата даты!

Сообщение nickleb » 18 окт 2016, 15:47

... или же так:

Код: Выделить всё

dt <- as.character("2016-07-16 03:49:48.000")
dtString <- gsub(" ", "T", dt)
dtString <- gsub(substr(dtString, 
                        nchar(dtString)-3, 
                        nchar(dtString)), 
                 "Z", dtString)
dtString 
... вариантов - море...

garrik_igorek
Новоприбывший
Сообщения: 9
Зарегистрирован: 12 мар 2016, 14:04
Репутация: 0

Re: Изменение формата даты!

Сообщение garrik_igorek » 18 окт 2016, 16:24

Предпоследний вариант отработал как надо, но почему то не поставил тип для столбца "Feature Type: DateTime Feature", а сделал его "Feature Type: Object Feature"

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: Изменение формата даты!

Сообщение nickleb » 18 окт 2016, 20:25

... ещё один вариант в R:

Код: Выделить всё

dt <- as.character("2016-07-16 03:49:48.000")
dtformat = "%Y-%m-%dT%H:%M:%SZ"
dtNewFormat <- strftime(dt, format=dtformat, tz="")
dtNewFormat

garrik_igorek
Новоприбывший
Сообщения: 9
Зарегистрирован: 12 мар 2016, 14:04
Репутация: 0

Re: Изменение формата даты!

Сообщение garrik_igorek » 19 окт 2016, 08:41

вот такая ошибка у меня в скрипте

character string is not in a standard unambiguous format


вот сам скрипт

Код: Выделить всё

colnames(data) <- c("Id", "DeviceTypeId", "DeviceId", "EventTypeId", "BegDate","EndDate", "Duration", "Tag", "MobileZoneId", "StaticZoneId", "DateCreation", "Src", "IsLoaded","DataDate", "Latitude", "Longitude", "IsSplited", "BaseEventId"); 

dt <- as.character(data$BegDate)
dtformat = "%Y-%m-%dT%H:%M:%SZ"
data$BegDate1 <- strftime(dt, format=dtformat, tz="")

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: Изменение формата даты!

Сообщение nickleb » 19 окт 2016, 10:11

в R нижеследующий фрагмент проходит без ошибок и предупреждений:

Код: Выделить всё

data <- data.frame (c(1,2,3), c("2016-07-16 03:49:48.000", "2016-07-16 03:49:49.000", "2016-07-16 03:49:50.000"))
colnames(data) <- c("Id", "BegDate")
dtformat = "%Y-%m-%dT%H:%M:%SZ"
data$BegDate <- strftime(data$BegDate, format=dtformat, tz="")
data$BegDate
Azure ML Studio у меня нет :( - проверить не могу ...

nplatonov
Интересующийся
Сообщения: 25
Зарегистрирован: 07 фев 2012, 12:00
Репутация: 20

Re: Изменение формата даты!

Сообщение nplatonov » 20 окт 2016, 08:24

Если понадобятся миллисекунды, то

Код: Выделить всё

format(as.POSIXlt("2016-07-16 03:49:48.987",tz="UTC"),"%Y-%m-%dT%H:%M%:%OS3Z")

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей