2017-08-30 82 views
0

我只是试图打开一个日期对象,当用户在他们的iPhone上启用“24小时时间”到“12小时时间”日期对象。转换24小时时间日期对象到12小时时间日期对象

我已经试过这在关于这个问题以前线程说,但我没有运气:

初始finalDate对象:日期2017年8月30日22:00:00 UTC

let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier:"en_US") 
dateFormatter.dateFormat = "MM/dd/yyyy h:mm a" 
let dateString = dateFormatter.string(from: finalDate) 
let theFinalConvertedDate = dateFormatter.date(from: dateString) 

我最终什么:

theFinalConvertedDate Date? 2017-08-30 22:00:00 UTC 

我不知道为什么会这样合作nsidering是dateString打印了出来:

"08/30/2017 5:00 PM"  

所以它最初将其转换为预期的输出,但theFinalConvertedDate结束是日期? 2017-08-30 22:00:00 UTC

+1

正如其他人所说,不需要'日期'转换,因为'日期'对象没有“24小时”和“12小时”格式。这完全是你想要'DateFormatter'输出字符串格式化的问题。但是这个'theFinalConvertedDate'字符串的目的是什么?它是用于在用户界面中呈现还是用于发送到Web服务或某些本地永久存储?这个问题的正确答案取决于这个字符串的最终用法是什么。 – Rob

回答

1

试图更改Date对象的格式没有任何意义。 A Date没有格式。您只能通过使用DateFormatDate转换为String来获得某种期望格式的字符串。

记录一个Date总是以固定格式显示UTC时区中的日期值。

所有你需要的是:

let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier:"en_US_POSIX") 
dateFormatter.dateFormat = "MM/dd/yyyy h:mm a" 
let dateString = dateFormatter.string(from: finalDate) 

dateString是你关心的价值。这将以所需的格式。

并且请注意,您需要使用en_US_POSIX以确保结果不受用户在iOS设备上的时间设置的影响。

+0

我觉得自己像个白痴。谢谢你rmaddy! – jenniferDWG

+1

rmaddy,我知道你知道这一点,但为了将来的读者,我提到它:如果字符串的用途是用于与Web服务和/或持久存储进行交互,则只能使用'en_US_POSIX'语言环境。如果向最终用户呈现日期,这将是一个非常糟糕的主意。但是,如果对于Web服务或持久性存储,那么使用'en_US_POSIX'是非常好的方法(但是如果是这样的话,这种'MM/dd/yyyy h:mm a'格式与ISO 8601/RFC 3999的选择是非常奇怪的)。 – Rob

+1

@Rob为了补充一点,我会说,对于任何日期/时间显示给用户,你应该很少使用'dateFormat'。你应该使用'dateStyle'和'timeStyle'的一些理想组合。 – rmaddy

相关问题