当前位置: 首页 > 知识库问答 >
问题:

转换后swift 5中的日期错误[重复]

邢卓
2023-03-14

我正在将当前日期转换为 GMT/UTC 日期字符串。但每次它都会给我错误的日期。

我今天的日期是2020年2月7日上午11:09:20。您可以参考下图。

以下是我的代码:

let apiFormatter = DateFormatter()
//apiFormatter.dateStyle = DateFormatter.Style.long
//apiFormatter.timeStyle = DateFormatter.Style.long
//apiFormatter.calendar = Calendar.current
apiFormatter.timeZone = TimeZone.init(identifier: "GMT") //TimeZone(abbreviation: "UTC") //TimeZone.current //
//apiFormatter.locale = Locale.current
//apiFormatter.dateFormat = "yyyy-MM-DD HH:mm:ss"
apiFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
//apiFormatter.dateFormat = "yyyy-MM-dd'T'hh:mm:ssZ"
let endDate = apiFormatter.string(from: Date())
print(endDate)

我得到的回报是你也可以签入图像 - 2020-02-38T05:33:34.598Z。我已经尝试了所有格式,但没有任何运气。任何人都可以建议它在哪里出错?

共有2个答案

萧和平
2023-03-14

试试这个并根据您从服务器获得的格式进行调整-

private func getFormatedDateInString(_ dateString: String) -> String? {
    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    dateFormatter.timeZone = TimeZone(identifier: "UTC")
    if let date = dateFormatter.date(from: dateString) {
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
        dateFormatter.timeZone = TimeZone.current
        let timeStamp = dateFormatter.string(from: date)
        return timeStamp
    }
    return nil
}
薛经纶
2023-03-14

首先,格式应为:

apiFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

Z不是文字字母,而是时区的描述。然而,将其文字化可能不会造成问题。

输出中的 38 表示日期显然是由您注释掉的 DD 格式引起的。

尽管如此,您必须设置语言环境:

apiFormatter.locale = Locale(identifier: "en_US_POSIX")

否则,您将在12/24h切换时遇到问题。

let apiFormatter = DateFormatter()
apiFormatter.locale = Locale(identifier: "en_US_POSIX")
// remove this if you want to keep your current timezone (shouldn't really matter, the time is the same)
apiFormatter.timeZone = TimeZone(secondsFromGMT: 0)
apiFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

let endDate = apiFormatter.string(from: Date())
print(endDate) // 2020-02-07T08:25:23.470+0000
print(Date())  // 2020-02-07 08:25:23 +0000

另请注意,您可以使用 ISO8601 日期格式化程序而不是日期格式化程序

 类似资料:
  • 我有以下应该返回时间戳的函数。当使用以下斜杠以字符串格式输入日期时,此代码有效:“2019/3/4”,但在使用 怎么回事?

  • 问题内容: 我想知道如何将转换到在Struts2。我有一个简单的表格,其中用户以这种格式提供日期。提交后,将Sturts2映射表单发送到Bean。我在日期转换中出错。我在很多地方都使用Google进行搜索,并指出必须为此使用自定义类型转换器。我不想编写用于日期转换的自定义类型转换器。我认为Struts2中应该有一种简单的数据转换机制,因为数据转换是非常常见的功能。 JSP 这是用户输入输入的JSP

  • 问题内容: 我有一个使用转换的字符串,现在我正尝试将其转换回来,但是当UIPicker启动时,这给了我错误的一天 我尝试了硬编码,但结果仍然相同。UIDatePicker上的日期在1991年12月22日开始。 如果我使用hardcore ,则从1979年12月23日开始。 (我不知道是不是这种情况,但是我在UIPickerView中有,但它是为字符串使用的。。我不认为是因为保存时,它保存了正确的值

  • 我以< code > " score timestamp ":" 2015-04-15t 10:00:00 . 000 z ",的形式传递日期,并希望使用方法将此json保存为数据库中的字符串 我希望日期为:“ScoreTimestamp”:“2015-04-15 10:00”,其中作为对象Mapper正在将其转换为: 有人能帮帮我吗?

  • 我有一个简单的方法,可以获取当前日期,将其转换为特定格式,然后作为字符串返回。到目前为止,它还不错(上次尝试是在1月31日左右),但由于某种原因,当我今天尝试它时,它返回字符串“2013-02-43”。 现在很明显,2月份没有43天,我不知道为什么它会返回这个。我到处寻找解决方案,但似乎没有一个适合我的具体问题。以下是代码: 为了记录在案,我尝试过使用Calendar.get实例()等。结果相同。

  • 问题内容: 我一直在寻找将日期从格林尼治标准时间转换为本地时间的最简单方法。当然,要考虑适当的夏令时日期并尽可能地采用标准日期。 我能想到的最直接的代码是: 但是我认为我对返回的结果没有正确的概念。 问题答案: 这里的问题是DateFormat类具有时区。请尝试以下示例: