Swift日期格式返回错误的日期



我需要将我的日期转换为字符串,然后将转化为date。日期是">2020年10月17日下午1:22:01+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

其返回"strong";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)!

其返回"strong";2020-10-17下午1:21:30+0000-时间间隔自引用日期:624633690.0">

它在我将字符串转换为日期后返回了错误的日期。我需要"2020-10-17 18:51:30+05:30">当我将字符串转换为日期时,这一次将返回。。。。。

问题中的代码混乱不堪。在第一个示例中,您尝试将字符串转换为字符串,在第二个示例中尝试将未指定的内容转换为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作为时区。这就是为什么它在上面的代码中更改了它。

在示例中,我明确指定了stringdate的类型,以显示它们的类型。类型推断意味着您可以在普通代码中省略这些。

作为处理日期的一般规则:

  • 始终在代码中使用DateDate是一种存储自1970年1月1日UTC以来的秒数的类型
  • 只有在向用户显示日期或与外部系统通信时,才能将日期转换为字符串
  • 在计算周期等时,请始终使用日历来获取以秒以外的单位表示的日期组件和间隔等信息。你可能会想得到";明天同一时间";你可以在Date上添加24*60*60,但在许多国家,比如我国,一年中只有363天可以使用。Calendar将正确处理夏令时和闰年等问题

最新更新