2017-10-16 84 views
0

因此,目前我有这个扩展名格式化返回:16/10/17 08:37:50 GMT但我需要16/10/17 08:37:50 PM UTC UTC附加到nsdate。我怎样才能做到这一点?如何获得UTC在UTC日期

以下是我的代码:

extension Formatter { 
static let iso8601: DateFormatter = { 
    let formatter = DateFormatter() 
    formatter.calendar = Calendar(identifier: .iso8601) 
    formatter.locale = Locale(identifier: "en_US_POSIX") 
    formatter.timeZone = NSTimeZone(abbreviation:"UTC") as TimeZone! 
    formatter.amSymbol = "AM" 
    formatter.pmSymbol = "PM" 
    formatter.dateFormat = "dd/MM/yy hh:mm:ss a zzz" 
    return formatter 
}() 
} 
+0

那么你为什么设置UTC时区?如果你只想要结尾不同,编辑字符串 –

+0

我也试过这个,但它不工作:formatter.dateFormat =“dd/MM/yy hh:mm:ss a UTC”。事实上,它给了我“2017年10月10日08:37:50”“ – lifemoveson

+0

编辑它之后,当你得到你的日期 –

回答

2

只需更改日期格式在格式字符串使用'UTC'代替zzz

formatter.dateFormat = "dd/MM/yy hh:mm:ss a 'UTC'" 

你需要把字符串文字像UTC在单引号,使他们不被解释为格式字符。

请注意,如果您将日期格式设置为UTC时区,上述将只有正常工作。如果将其设置为其他时区,则输出字符串仍将以UTC结尾,这将是错误的。

+0

我不认为这会是一个问题考虑使用它生成并发送到服务器的所有字符串将是有效的 –

+0

@LeoDabus实际上,该格式化程序是否也将日期字符串转换回日期?它会承担UTC不管什么,但它应该工作。 –

+0

正如我所说,只要字符串通过它是UTC时间就可以。并且用它生成的日期字符串也可以。 –

0

在这里,我改变当前日期,保存相同的时间和日期,但只有时区变化。尝试,如果这对你的作品

var now: Date { 
    let formatter = DateFormatter() 
    formatter.dateFormat = Const.dateFormat 
    formatter.timeZone = TimeZone.current 
    let date = Date() 

    let dateFormatter = DateFormatter() 
    dateFormatter.calendar = Calendar(identifier: .iso8601) 
    dateFormatter.locale = Locale(identifier: "en_US_POSIX") 
    dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss a zzz" 
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC") 
    let str = dateFormatter.string(from: date) 
    return formatter.date(from: str) 
}