【问题标题】:Issue in formatting date string Swift 3 [duplicate]格式化日期字符串Swift 3中的问题[重复]
【发布时间】:2018-02-10 11:03:08
【问题描述】:

我需要将以下日期字符串转换为 Swift 3 中的日期。

Fri Dec 09 16:18:43 AMST 2016

这是我一直在使用的代码,但它通过这个特定的日期字符串转换获得了现金。 (这个日期是在Android上使用new Date().toString()方法记录的。)

static func formatDate(date: String) -> String {
        let dateFormatter = DateFormatter()

        dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
        dateFormatter.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy" 
        //Works for "Fri Sep 16 10:55:48 GMT+05:30 2016"

        var myDate = dateFormatter.date(from: date)
        // My date returns nil on "Fri Dec 09 16:18:43 AMST 2016"

        dateFormatter.dateFormat = "dd/MM/yyyy"
        return "\(dateFormatter.string(from: myDate!))"
    }

数据库中有两种类型的字符串。我尝试了各种类型的时区格式(z/zz/zzz/zzzz/zzzzz),但总是 myDate 返回 nil。

任何帮助将不胜感激。 提前致谢。

【问题讨论】:

  • 字符串包含AMST
  • 使用这个:nsdateformatter.com
  • 尝试不使用时区,如果这不起作用,请尝试将您的日期格式重新安排为“EEE MMM dd HH:mm:ss zzz yyyy”和 dateFormatter.timeZone = NSTimeZone.local 或尝试设置 Local .current

标签: ios swift nsdateformatter nstimezone


【解决方案1】:

TimeZone(abbreviation:) 的 Apple 文档:

一般来说,我们不鼓励您使用缩写,除非是“GMT”等独特的实例。时区缩写没有标准化,因此给定的缩写可能有多种含义。

AMST 是代表“亚马逊夏令时间”(UTC-3) 还是“亚美尼亚夏令时间”(UTC+5)?见:https://www.timeanddate.com/time/zones

这可能是它无法检测到要使用的正确时区的原因。

我可以提出的解决方案:

  1. 如果您知道 AMST 是哪个时区:
    • 将日期字符串中的 AMST 替换为 UTC-3 或 UTC+5
    • 从日期字符串中删除 AMST 并使用dateFormatter.timeZone = TimeZone(secondsFromGMT: -3 or 5 * 3600)
  2. 让您的源输出更精确的时区。

注意以下代码,其中 AMST 被正确理解:

let df = DateFormatter()
df.locale = Locale.init(identifier: "pt_BR") // assuming AMST is Amazon Summer Time (UTC -3)
df.dateFormat = "HH:mm:ss z"

print(df.date(from: "16:18:43 AMST")) // Optional(2000-01-01 19:18:43 +0000)

但只要您包含英文日期或月份名称(例如 Fri 或 Dec),它将生成 nil(因为它们不是葡萄牙语)。

【讨论】:

    猜你喜欢
    • 2012-01-07
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2017-09-16
    相关资源
    最近更新 更多