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

时间:2018-03-21 05:32:24

标签: swift date dateformatter

这是事情。 我的上传/下午格式的iPhone和西班牙语的iPhone语言(MX)。 当我要求约会的时候,我会得到像2018-03-21 5:14:59这样的东西。米+0000,它是一个日期类型,然后我尝试将其转换为24小时格式的字符串,我得到类似2018-03-20 23:14:59的东西,它是一个字符串类型,但是当我尝试将该字符串转换为日期,我再次以am / pm格式获得相同的日期2018-03-21 5:14:59 a。米+0000 我不知道还能做什么,我想要的只是将我的上午/下午日期转换为24小时日期而不是STRING。 请帮帮我。 这是我在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

1 个答案:

答案 0 :(得分:3)

  

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

那不是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正在使用Date s description实施,为您提供有关它的当前价值的信息

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

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

会打印2018-03-21 16:44:17

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