ios - 为什么我的 dateFormatter 只能在 24 小时制设备设置下工作?

标签 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 小时制中工作,因此用户不需要手动更改他们的设置。

我该怎么办?

最佳答案

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

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

设置dateFormat之前设置locale很重要

关于ios - 为什么我的 dateFormatter 只能在 24 小时制设备设置下工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49789553/

相关文章:

ios - 尝试将数据从 UIPicker 发送到 Firebase 数据库

ios - 为什么我的系统镜像在运行时没有显示在我的应用程序中?

ios - 图层沿 x/y 轴而不是 z 轴旋转

javascript - 尝试从 WKWebView 中的 Javascript 获取信息(使用 KINWebBrowser)

java - 如何在 Java 中从具有日期的对象获取日期变量

php - 从数据库检索的 unix 时间戳获取周

ios - 有没有办法使用循环来标记多个项目(swift 3)

IOS 错误约束 ViewDidAppear 与 ViewDidLoad

ViewController 扩展中的 Swift @IBActions

sql - 在 SQL 中,如果为空,如何将日期字段转换为字符串?