繁体   English   中英

UIDatePicker在模拟器和iPhone之间输出不同格式的日期字符串

[英]UIDatePicker outputs different formats of string of date between simulator and iPhone

我在iPhone和模拟器上运行了UIDatePicker ,它们都以不同的格式显示输出?

我该如何解决这个问题? 有没有可以解决的格式? 我知道是因为NSLocale 因为我希望我的应用程序不仅可以在一个国家/地区使用。 我需要将日期保存到服务器以进行搜索和比较。 因此,我需要一种格式来解决。

谢谢。

如您所说, UIDatePicker上显示的日期格式取决于设备的区域设置。 默认情况下,模拟器设置为en_US,假设您的设备不同。

不要强迫用户使用我们的标准格式-日期应在选择器中以其设备的语言环境格式显示-使用标准格式会使大多数用户感到困惑。 例如,美国的用户可能希望看到他们的日期为MM / DD / YY,英国的为DD / MM / YY,南非的为YY / MM / DD。 如果您强制使用标准格式,则对大多数用户来说是错误的。 参见http://en.wikipedia.org/wiki/Date_format_by_country

不管UIDatePicker 显示什么格式,用户选择的日期都是Date对象。 它没有格式,只是一个时间点。

如果您要比较/搜索日期,请不要使用格式化的日期字符串。 使用DateCalendar等方法。

如果print Date对象的值,它将使用当前的语言环境对其进行格式化(但这就是它的显示方式,日期本身没有格式)

有关更多Date信息,请参阅Apple文档

如果要以固定格式将所选日期发送到服务器,则应使用DateFormatter并将格式/区域设置设置为所需的格式。 Apple的建议是使用en_US_POSIX作为语言环境。 在将日期转换为要发送到服务器的格式时,仅在内部使用此功能-用户不应看到此信息。

苹果文档

let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(localeIdentifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(forSecondsFromGMT: 0)

/* 39 minutes and 57 seconds after the 16th hour of December 19th, 1996 with an offset of -08:00 from UTC (Pacific Standard Time) */
let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.dateFromString(string)

在iOS 10+中,这已简化-您可以仅使用ISO8601Date​Formatter

我建议保留用户选择的日期格式,而不要修改它,因为这是用户期望的。

步骤1)如果您需要通过其他功能进一步处理所选日期,或者想要将其以某种格式发送到服务器,请使用特定于语言环境的日期格式创建一个NSDate对象: https : //developer.apple.com/library /content/documentation/MacOSX/Conceptual/BPInternational/InternationalizingLocaleData/InternationalizingLocaleData.html

步骤2)并使用另一个满足您需求的NSDateFormatter,现在将NSDate转换为NSSTring,您可以将其发送给其他格式的标准格式。 https://developer.apple.com/reference/foundation/nsdateformatter

另一个选择是仅显示区域设置格式的日期,但保留对原始Date对象的引用,这样您可以跳过步骤1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM