2015-08-15 1 views
13

Я хочу преобразовать 2015-08-14T20:02:25-04:00 в 2015-08-14 16:02
Я пробовал ниже, но он не мог нормально работать (возвращено nil).Как можно преобразовать, включая дату часового пояса в swift?

let d = "2015-08-14T20:02:25-04:00" 
let formatter = NSDateFormatter() 
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZZ" 
let date: NSDate? = formatter.dateFromString(d) 

Как я могу преобразовать этот формат даты?

+0

Я не уверен, что 'NSDateFormatter' имеет прямой путь, но вы можете разложить строку (т. Е. Разделить на дату, время, TZ) и построить соответствующую строку для ввода в' NSDateFormatter'. –

ответ

24

Xcode 8 • Swift 3

let dateString = "2015-08-14T20:02:25-04:00" 
let formatter = DateFormatter() 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxxx" 
if let dateFromString = formatter.date(from: dateString) { 
    formatter.dateFormat = "yyyy-MM-dd HH:mm" 
    let stringFromDate = formatter.string(from: dateFromString) 
} 

Вам нужно бежать 'T' и использовать "ххххх" за "-04: 00":

let dateString = "2015-08-14T20:02:25-04:00" 
let formatter = NSDateFormatter() 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxxxx" 
if let dateFromString = formatter.dateFromString(dateString) { 
    formatter.dateFormat = "yyyy-MM-dd HH:mm" 
    let stringFromDate = formatter.stringFromDate(dateFromString) 
} 

Если вы необходимо указать, что вы можете использовать это:

enter image description here

+0

Я мог бы. Спасибо! – naohide

+0

@naohide добро пожаловать –

+0

Это не работает, если я использую xxx для '+05: 00' – Vakas

2
let date: String = "2015-08-14T20:02:25-04:00" 
let fcBackendDateFormat = "yyyy-MM-dd'T'HH:mm:ss-ss:ss" 

let formatter = NSDateFormatter() 
formatter.dateFormat = fcBackendDateFormat 
println(formatter.dateFromString(date)) // "Optional(2015-08-14 18:02:00 +0000)" 

Как вы можете видеть 2 часа вычитаются из прошедшего времени, дата интерпретируется как UTC и в моем часовом поясе, что означает -2 часа.

+0

Интересно, как этот ответ получил два оборота. '' 'это только за секунды. Вы не можете использовать его в своем формате даты, чтобы анализировать часовой пояс из строки даты. Второй вопрос в этом ответе - это то, что перед ним стоит знак минус минус. В-третьих, если вы не устанавливаете языковой стандарт даты в «en_US_POSIX», ваш код может упасть из-за того, что формат времени устройства устанавливается на 12 часов вместо 24 часов автоматически с помощью локали устройств или вручную устанавливает пользователя. –

1

Вы можете использовать:

formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZ" 

Надеется, что это помогут вам!

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