2013-08-29 2 views
0

Передача следующего интерпретируется как 12 февраля 2013 года вместо 2 декабря 2013 года .. есть ли причина для этого? Должен ли я когда-нибудь менять какой-либо системный дефолт? Это использует Ruby 2.0.0Почему DateParse использует формат даты в европейском формате здесь

2.0.0-p247-turbo :003 > dt=DateTime.parse("12/2/2013 1:00:00 PM") 
=> #<DateTime: 2013-02-12T13:00:00+00:00 ((2456336j,46800s,0n),+0s,2299161j)> 
2.0.0-p247-turbo :004 > dt.day 
=> 12 
2.0.0-p247-turbo :005 > dt.month 
=> 2 
2.0.0-p247-turbo :006 > dt.year 
=> 2013 
+0

Передайте аргумент формата методу. Вы можете посмотреть его, получить его от клиента, сервера, даже жестко записать его, но не полагаться на культуру системы для синтаксического анализа. Это жуткий праздник. –

ответ

3

Как насчет strptime?

DateTime.strptime("12/2/2013 1:00:00 PM", "%m/%d/%Y %H:%M:%S %p") 

Я не знаю, зависит ли это поведение от системных настроек, или это то, что Ruby всегда делает. Во всяком случае, я предпочел бы это требование (эти даты должны быть проанализированы таким образом), очевидные в коде.

Смотрите также: http://foragoodstrftime.com (где я получил формат строки из)

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