我需要将我的日期转换为字符串,然后将字符串转换为日期。日期为“ 2020-10-17 1:22:01 PM +0000 ”
这是字符串转换代码的日期:
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
let string = formatter.string(from: "2020-10-17 1:22:01 PM +0000")
let createdAT = string
其返回的“ 2020-10-17 18:51:30 + 05:30”
这是我的字符串到日期的转换代码:
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ssZ"
let date = dateFormatter.date(from:date)!
其返回的“ 2020-10-17 1:21:30 PM +0000-timeIntervalSinceReferenceDate:624633690.0”
我将字符串转换为日期后,返回错误的日期。我需要“ 2020-10-17 18:51:30 + 05:30” 这一次是在我将字符串转换为日期时返回.....
答案 0 :(得分:0)
您问题中的代码混乱了。在第一个示例中,您尝试将字符串转换为字符串,在第二个示例中,您尝试将未指定的内容转换为Date
。
以下是将Date
转换为String
的方法:
import Foundation
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
let string: String = formatter.string(from: Date())
print(string) // prints for example 2020-10-18T10:54:07+01:00
这里是将字符串转换为日期的方法
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ssZ"
let date: Date = formatter.date(from: "2020-10-18 10:59:56+0100")! // In real life, handle the optional properly
print(date) // prints 2020-10-18 09:59:56 +0000
直接打印日期时,它将自动使用UTC作为时区。这就是为什么在上面的代码中更改了它。
在示例中,我明确指定了string
和date
的类型以显示它们是什么类型。类型推断意味着您可以在常规代码中忽略这些。
作为处理日期的一般规则:
Date
。 Date
是一种存储自1970年1月1日UTC以来的秒数的类型。Date
中添加24 * 60 * 60,但是在许多国家(例如我的国家),一年仅工作363天。 Calendar
将正确处理夏时制和leap年。