【问题标题】:why my dateFormatter only work in 24-Hour Time device setting? [duplicate]为什么我的 dateFormatter 仅适用于 24 小时制设备设置? [复制]
【发布时间】:2018-04-12 06:33:47
【问题描述】:

我想更改字符串日期的格式以获取字符串中的月份名称。

我想从“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 小时制),则上述代码将按预期运行,如下所示

但是如果我关闭 24 小时制(激活 12 小时制),该函数将在这一行返回 nil

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

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

我该怎么办?

【问题讨论】:

  • ` changeFormat(of "2018-04-12 11:52:12", toFormat : "MMMM")` 你是如何创建 dateTime "2018-04-12 11:52:12" ?
  • 那个字符串“2018-04-12 11:52:12”实际上来自服务器

标签: ios swift date datetime


【解决方案1】:

如果您希望它不受您设备的区域设置影响,您需要设置DateFormatterlocale 属性

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

重要的是设置locale你设置dateFormat

【讨论】:

  • 感谢您的回答,这节省了我的时间!
猜你喜欢
  • 2013-05-27
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 2019-11-07
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多