格式化日期字符串问题 Swift 3
Issue in formatting date string Swift 3
我需要将以下日期字符串转换为 Swift 中的日期 3.
Fri Dec 09 16:18:43 AMST 2016
这是我一直在使用的代码,但它在这个特定的日期字符串转换中获得了现金。 (此日期是使用 new Date().toString()
方法在 Android 上记录的。)
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
returns nil.
如有任何帮助,我们将不胜感激。
提前致谢。
TimeZone(abbreviation:)
的 Apple 文档:
In general, you are discouraged from using abbreviations except for unique instances such as “GMT”. Time Zone abbreviations are not standardized and so a given abbreviation may have multiple meanings.
AMST代表"Amazon Summer Time"(UTC-3)还是"Armenia Summer Time"(UTC+5)?参见:https://www.timeanddate.com/time/zones
这可能就是它无法检测到要使用的正确时区的原因。
我可以提出的解决方案:
- 如果您知道 AMST 是哪个时区:
- 将日期字符串中的 AMST 替换为 UTC-3 或 UTC+5
- 从日期字符串中删除 AMST 并使用
dateFormatter.timeZone = TimeZone(secondsFromGMT: -3 or 5 * 3600)
- 让您的源输出更精确的时区。
请注意以下代码,其中 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
(因为它们不是葡萄牙语)。
我需要将以下日期字符串转换为 Swift 中的日期 3.
Fri Dec 09 16:18:43 AMST 2016
这是我一直在使用的代码,但它在这个特定的日期字符串转换中获得了现金。 (此日期是使用 new Date().toString()
方法在 Android 上记录的。)
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
returns nil.
如有任何帮助,我们将不胜感激。 提前致谢。
TimeZone(abbreviation:)
的 Apple 文档:
In general, you are discouraged from using abbreviations except for unique instances such as “GMT”. Time Zone abbreviations are not standardized and so a given abbreviation may have multiple meanings.
AMST代表"Amazon Summer Time"(UTC-3)还是"Armenia Summer Time"(UTC+5)?参见:https://www.timeanddate.com/time/zones
这可能就是它无法检测到要使用的正确时区的原因。
我可以提出的解决方案:
- 如果您知道 AMST 是哪个时区:
- 将日期字符串中的 AMST 替换为 UTC-3 或 UTC+5
- 从日期字符串中删除 AMST 并使用
dateFormatter.timeZone = TimeZone(secondsFromGMT: -3 or 5 * 3600)
- 让您的源输出更精确的时区。
请注意以下代码,其中 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
(因为它们不是葡萄牙语)。