tôi đã "strptiming" chuỗi này:
19/05/2014 8:13:26 a.m.
Một dấu thời gian địa phương, đó là trong trường hợp của tôi là Auckland New Zealand không có con dấu múi giờ trong chuỗi như có thể được nhìn thấy.
Tốt nhất tôi có thể yêu cầu Time.strptime
sử dụng múi giờ máy chủ làm cơ sở.
Trong trường hợp của tôi, và thực hành tốt nói chung, các máy chủ của tôi chạy trong múi giờ UTC như vậy mỗi phân tích cú pháp của chuỗi kết thúc việc tạo một đối tượng thời gian, thời gian để 0000 (UTC):
2014-05-19 08:13:26 +0000
Sau đó chuyển đổi đến cho:
Mon, 19 May 2014 20:13:26 NZST +12:00
Có thể xem 12 giờ (chênh lệch UTC) sau thời gian thực tế tôi muốn.
Tôi đã cố gắng sử dụng thủ thuật +' Auckland', '...%Z'
như trên mà không có bất kỳ thay đổi nào. Sau đó tôi đã sử dụng thủ thuật + '+1200', '...%Z'
như trên mà đã hoạt động chính xác.
Tuy nhiên tôi rất lo lắng về thời gian mùa hè, sau đó các phân tích cú pháp sẽ được ra bởi một tiếng đồng hồ, vì vậy đây là những gì tôi đã finshed với:
Time.strptime(call_data[:datetime].gsub(/\./, "").gsub(/am/, "AM").gsub(/pm/, "PM") + (Time.zone.now.time_zone.utc_offset/3600).to_s.ljust(4,'0').rjust(6,' +'), '%d/%m/%Y %I:%M:%S %p %Z').in_time_zone(Time.zone)
Kết quả:
Mon, 19 May 2014 08:13:26 NZST +12:00
Nó không đặc biệt thanh lịch nhưng nó hoạt động.
nếu bạn ở quốc gia có múi giờ CEST/CET, khoản bù đắp cố định sẽ không hoạt động. Cũng quan tâm đến điều này, tôi không thấy làm thế nào làm cho phân tích strptime cho múi giờ hiện tại (nhưng không phải là giá trị ngay bây giờ, một trong những quyền tùy thuộc vào chuỗi phân tích cú pháp). – tokland