ios - 格式化日期字符串 Swift 3 中的问题

标签 ios swift nsdateformatter nstimezone

我需要将以下日期字符串转换为 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 返回 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 代表“亚马逊夏令时”(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(因为它们不是葡萄牙语)。

关于ios - 格式化日期字符串 Swift 3 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45999251/

相关文章:

ios - 如何解析 "Initializer for conditional binding must have Optional type, not ' Int'”?

objective-c - 如何将Objective-C语言(“va_list”,“va_start”,“va_end”)转换为快速语言?

ios - 当接听来电时,音频似乎无法与 CallKit 配合使用

ios - 如何在Swift中自行搭建UISlider自动滑动?

ios - 如何关闭滑动搜索栏?

iphone - 将 NSMutableArray 保存到 NSUserDefaults - 添加对象时出现问题

ios - 如何在 IOS 中将日期格式化为字符串,如 "One Days Ago","Minutes Ago"?

ios - Swift iOS doesRelativeDateFormatting 除了 "Today"和 "Yesterday"之外还有不同的值吗?

ios - 无法将 GMT 字符串日期转换为 Nsdate

ios - UIImageView可以制作这样的可拉伸(stretch)区域吗?