swift - 如何将日期从上午/下午转换为 24 小时格式

Posted

技术标签:

【中文标题】swift - 如何将日期从上午/下午转换为 24 小时格式【英文标题】:swift - how to convert date from am/pm to 24 hour format 【发布时间】:2018-03-21 05:32:24 【问题描述】:

事情就是这样。 我的 iPhone 是 am/pm 格式,iPhone 语言是西班牙语 (MX)。 当我询问日期时,我得到类似 2018-03-21 5:14:59 a 的信息。米。 +0000 它是一个日期类型,然后我尝试将其转换为 24 小时格式的字符串,我得到类似 2018-03-20 23:14:59 的内容,它是一个字符串类型,但是当我尝试将该字符串转换为日期,我再次以上午/下午格式获得相同的日期 2018-03-21 5:14:59 a。米。 +0000 我不知道还能做什么,我想要的只是将我的上午/下午日期转换为 24 小时日期而不是字符串。 请帮帮我。 这是我在 Swift 4 中的代码

    let todayDate = Date()
    print("todayDate: \(todayDate)")
    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ss"
    let stringDate = dateFormatter.string(from: todayDate)
    print("stringDate: \(stringDate)")
    let dateFromString = dateFormatter.date(from: stringDate)
    print("dateFromString: \(dateFromString!)\n\n\n")

这是我的控制台结果

    todayDate: 2018-03-21 5:14:59 a. m. +0000
    stringDate: 2018-03-20 23:14:59
    dateFromString: 2018-03-21 5:14:59 a. m. +0000

【问题讨论】:

github.com/melvitax/DateHelper Date 对象没有格式的内部概念,它只是从锚点开始的一段时间的容器。 dateFromString 只是打印了descriptionDates 实现,您需要将Date 值再次格式化回String 你想为哪个国家做?你的国家是什么? 没有理由去做你想做的事。您的 Date 对象就可以了。当您在 Date 对象上使用 print 时,不要担心它的外观。仅当您真正希望使用 DateFormatter 将日期显示为 String 时才担心输出。 我在数据库(领域)中有一个 initDate 和一个 finishDate,我试图验证 todayDate 是否在该范围内。但是领域中的日期采用 24 小时格式,而当 todayDate 采用 AM/PM 格式时,我无法比较这些日期。当 todatDate 是 24 小时格式时,一切都很好。 【参考方案1】:

我想要的只是将我的上午/下午日期转换为 24 小时日期而不是字符串

Date 不是这样工作的。

From the Documentation

日期值表示相对于绝对参考日期的时间间隔。

Date 只是一个容器,用于表示自参考日期以来的一段时间,它本身不携带任何格式信息。

let dateFromString = dateFormatter.date(from: stringDate)
print("dateFromString: \(dateFromString!)\n\n\n")

只是将stringDate(在您的示例中为2018-03-20 23:14:59)转换回Date 对象,print 正在使用Dates description 实现为您提供有关其当前值的信息

所以,如果我们改为添加...

print("dateFromString: \(dateFormatter.string(from: dateFromString!))\n\n\n")

它将打印2018-03-21 16:44:17

你最好的选择是不在乎。只需在 Date 对象中携带值并将其格式化为 String,当您需要将其显示给用户或需要对其进行格式化时 - 这就是使用格式化程序的重点

【讨论】:

以上是关于swift - 如何将日期从上午/下午转换为 24 小时格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在上午/下午 24 小时之间设置日期

如何在ios中以24小时格式显示上午/下午

php 24小时格式的日期转换为12小时的日期

从时间戳列表中获取上午 8 点到下午 5 点之间的时间戳

oracle中如何转换时间格式

Swift 将日期字符串转换为日期