我想转换任何时间,UTC,GMT + 2等等,任何事情都只有GMT +3
我试过这段代码但没有成功
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
formatter.timeZone = TimeZone.current
let currentdate = formatter.string(from: date)
print("currentdate \(currentdate)")
let gmt = DateFormatter()
gmt.timeZone = TimeZone(secondsFromGMT: 3600*3)
gmt.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
let gmtDate = gmt.date(from: currentdate)!
print("gmtDate -> \(gmtDate)")
我尝试了时区的缩写,同样的结果是日期只是GMT。
有什么想法吗?
答案 0 :(得分:3)
您的代码存在很多问题。首先,没有理由从Date
转到String
并返回Date
。其次,如果您要将String
转换为Date
,并且String
包含自己的时区信息,则设置格式化程序timeZone
毫无意义。计算关联的Date
时,将使用字符串中的时区。只有两种情况可以设置日期格式化程序的时区:
Date
转换为String
时。从日期生成结果字符串时,将使用格式化程序的时区。如果您只想在特定时区内将Date
显示为String
,那么您只需要:
let date = Date() // some date
print("Original Date (in GMT): \(date)")
// Setup a formatter with a date and time style
let formatter = DateFormatter()
formatter.timeZone = TimeZone(secondsFromGMT: 3600 * 3) // the desired timezone
formatter.dateStyle = .long
formatter.timeStyle = .medium
let string = formatter.string(from: date)
print("GMT+3 style result: \(string)")
// For comparison, set the formatter to a specific format
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
let string2 = formatter.string(from: date)
print("GMT+3 format result: \(string2)")
输出(对于en_US语言环境):
原始日期(格林威治标准时间):2017-10-28 20:53:59 +0000
GMT + 3风格结果:2017年10月28日下午11:53:59
GMT + 3格式结果:2017-10-28 23:53:59 +0300
无需随时转换。只需从String
创建Date
即可获得所需的输出。
请注意,默认情况下,DateFormatter
会以当地时间显示其结果。如果您希望将结果放在其他特定时区,请设置格式化程序timeZone
。
另请注意,打印Date
对象始终以UTC时间(+0000)显示日期。许多人对此感到困惑,并认为他们错误的日期不是。
答案 1 :(得分:1)
雨燕5
private func convertDate(string:String) -> String {
let dateFormatter = DateFormatter()
// format in which the date and time comes from the server
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
// set the time zone, the time is stored on the server
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+3")
// convert to Date
let date = dateFormatter.date(from: string)
// now set our local time zone
dateFormatter.timeZone = TimeZone.current
// time format we need
dateFormatter.dateFormat = "dd.MM.yyyy HH:mm"
// convert the Date obtained above into text format
let displayString = dateFormatter.string(from: date!)
// local time is ready)))
return displayString
}