为什么我的dateFormatter仅适用于24小时制设备?

时间:2018-04-12 06:33:48

标签: ios swift date datetime

我想更改字符串日期的格式,以便在字符串中只获取一个月的名称。

我想从“yyyy-MM-dd HH:mm:ss”改为“MMMM”格式

如下面的代码:

func changeFormat(of dateTime: String, fromFormat format1: String = "yyyy-MM-dd HH:mm:ss", toFormat format2: String) -> String? {

            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = format1
            guard let originDate = dateFormatter.date(from: dateTime) else {
                return nil
            }

            dateFormatter.dateFormat = format2
            let newFormattedDate = dateFormatter.string(from: originDate)


            return newFormattedDate
        }


    // usage
    changeFormat(of "2018-04-12 11:52:12", toFormat : "MMMM")

如果设备中的日期时间格式设置为24小时格式(设置 - >常规 - >日期&时间 - > 24小时时间),则上面的代码将按预期运行,如下所示

enter image description here

但如果我关闭24小时制(激活12小时时间格式),该功能将在此行返回nil

guard let originDate = dateFormatter.date(from: dateTime) else {
            return nil
        }

我希望该功能在24小时制或12小时制中工作,因此用户无需手动更改其设置。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

如果您希望它无论设备的区域设置如何都能正常工作,您需要设置DateFormatter

let dateFormatter = DateFormatter() dateFormatter.locale = Locale(identifier: "en_US_POSIX") dateFormatter.dateFormat = format1 属性
locale

设置dateFormat 之前设置[DisableConcurrentExecution(<timeout>)] 非常重要