Swift 日期格式返回错误的日期
Posted
技术标签:
【中文标题】Swift 日期格式返回错误的日期【英文标题】:Swift date format returning wrong date 【发布时间】:2020-10-18 07:20:53 【问题描述】:我需要将我的 date 转换为 string,然后将 string 转换为 date。日期是“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" 这一次在我将字符串转换为日期时返回.....
【问题讨论】:
2020-10-17 1:21:30 PM +0000 和 2020-10-17 18:51:30+05:30是同一时间。 一个 Date 对象没有格式,它只包含时间的表示,所以你的代码是没有意义的。按原样使用原始的 Date 对象,然后在需要显示/打印时执行格式为字符串。 @Paulw11 是的。但是当我将字符串转换为日期时,我需要 020-10-17 1:21:30 PM +0000 到 020-10-17 1:21:30 PM +0000 .. 我需要添加此代码进行什么样的更改 您需要使用DateFormatter
将其转换为字符串并在日期格式化程序上设置适当的时区
@JoakimDanielson,因为我是 swift 新手,请您指导我。带有代码示例
【参考方案1】:
您问题中的代码混乱。您尝试在第一个示例中将字符串转换为字符串,在第二个示例中将未指定的内容转换为 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 以来的秒数的类型。
仅在向用户显示日期或与外部系统通信时将日期转换为字符串。
在计算周期等时,请始终使用Calendar 来获取日期组件和间隔等信息,而不是秒。您可能会认为要获得“明天同一时间”,您可以将 24 * 60 * 60 添加到 Date
但在许多国家,比如我的国家,一年中只有 363 天有效。 Calendar
将正确处理夏令时和闰年等问题。
【讨论】:
以上是关于Swift 日期格式返回错误的日期的主要内容,如果未能解决你的问题,请参考以下文章