2016-09-16 6 views
1

Как импортировать пример форматирования даты и времени в R? Я готов хранить всю информацию в этом формате.R: дата/время «YYYY-MM-DDThh: mm: ss.sTZD» импорт

2016-09-12T09:47:00.000+0200 

где:

YYYY = four-digit year 
MM = two-digit month (01=January, etc.) 
DD = two-digit day of month (01 through 31) 
hh = two digits of hour (00 through 23) (am/pm NOT allowed) 
mm = two digits of minute (00 through 59) 
ss = two digits of second (00 through 59) 
s = one or more digits representing a decimal fraction of a second 
TZD = time zone designator (Z or +hh:mm or -hh:mm) 

Я попытался strptime без успеха, так как я не могу найти, как соответствовать s и TZD, пример:

> strptime("2016-09-12T09:47:00.000+0200", format = '%Y-%m-%dT%H:%M:%S.000%z') 
[1] "2016-09-12 09:47:00 

ответ

2

Чтобы соответствовать десятичную долю второй (из таблицы docs в примерах):

format = '%Y-%m-%dT%H:%M:%OS%z' 

Затем, чтобы увидеть 3-х цифр:

op <- options(digits.secs = 3) 
strptime("2016-09-12T09:47:00.123+0200", format = '%Y-%m-%dT%H:%M:%OS%z') 
##[1] "2016-09-12 03:47:00.123" 

Чтобы вернуться к не видя 3-цифры:

options(op) 

Я считаю, что это разобрать смещение от UTC (то есть, +0200). Я на восточном побережье Соединенных Штатов, и это EDT (-0400). Поэтому я отстаю на 6 часов (+0200), так что 09:47:00.123+0200 становится 03:47:00.123 EDT.

+0

Ничего себе, спасибо! Я пропустил% OS ... как я могу быть уверен, что это GMT + 2 (в моем случае я живу во Франции): я должен полагаться на то, что он автоматически преобразуется в ваш местный часовой пояс? возможно, мне придется добавить «GMT + 2» к результату ... – guzu92

+0

@ guzu92: Да, я считаю, что 'strptime' автоматически преобразуется в ваше местное время на основе вашей локали, если видит смещение от UTC. Я считаю, что вы можете установить локаль, но я никогда не делал этого раньше. – aichao

+0

@ guzu92: Я должен добавить, что если вы не используете смещение UTC (и не используете '% z') в конце, тогда' strptime' интерпретирует это как ваше местное время. – aichao

2

Вы можете использовать (довольно новый) anytime пакет, который делает это без форматов:

R> anytime("2016-09-12T09:47:00.000+0200") 
[1] "2016-09-12 09:47:00 CDT" 
R> 

Я могу попытаться распространить его также признать задний TZ смещение как основной Boost date_time код поддерживает его. Тем не менее, я до сих пор следил за R и принимал за интерпретацию времени как по местному времени, для которого он также (автоматически) находит местный часовой пояс.

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

R> anytime("2016-09-12T09:47:00.123456+0200") 
[1] "2016-09-12 09:47:00.123456 CDT" 
R> 

Я, как правило, работают с данными микросекунд, так что я, как правило, имеют шесть цифр на все равно, как показано здесь.

 Смежные вопросы

  • Нет связанных вопросов^_^