[英]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
对象。 它没有格式,只是一个时间点。
如果您要比较/搜索日期,请不要使用格式化的日期字符串。 使用Date
, Calendar
等方法。
如果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+中,这已简化-您可以仅使用ISO8601DateFormatter
类
我建议保留用户选择的日期格式,而不要修改它,因为这是用户期望的。
步骤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.