1.在我的应用程序中,用户选择一个日期,所选日期显示在另一个用户手机的底部表格中。
1.如果两个用户的手机都在12小时区(AM-PM),则没有问题。
1.如果使用12时区的用户向使用24时区的用户发送时钟,则时间显示为成功。
1.但是,如果用户使用24个时区发送时钟给用户使用12个时区,则用户看不到时间。因为该函数返回nil。(由于土耳其时间的扭曲,我使用了??和??控制。上午/下午)
func utcTime(dateStr: String) -> String? {
let isCurrentDevice12HoursFormat = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)?.range(of: "a") != nil
let isDateStr12HoursFormat = dateStr.last == "M"
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let isPM = dateStr.contains("ÖS")
let isAM = dateStr.contains("ÖÖ")
dateFormatter.amSymbol = isAM ? "ÖÖ" : "AM"
dateFormatter.pmSymbol = isPM ? "ÖS" : "PM"
if dateStr.contains("ÖÖ") || dateStr.contains("ÖS") {
dateFormatter.dateFormat = "yyyy-MM-dd a h:mm:ss"
} else {
dateFormatter.dateFormat = isDateStr12HoursFormat ? "yyyy-MM-dd' 'h:mm:ss a" : "yyyy-MM-dd HH:mm:ss"
}
if let date = dateFormatter.date(from: dateStr) {
dateFormatter.timeZone = TimeZone.current
dateFormatter.dateFormat = isCurrentDevice12HoursFormat ? "yyyy-MM-dd' 'h:mm:ss a" : "yyyy-MM-dd' 'HH:mm:ss"
return dateFormatter.string(from: date)
}
return nil
}
1条答案
按热度按时间rwqw0loc1#
这句话解决了我的问题
DateFormatter.Locale=区域设置(标识符:“EN_US_POSIX”)