为什么使用AM/PM的用户无法查看在24台设备上创建的时间

sgtfey8w  于 2022-10-23  发布在  Swift
关注(0)|答案(1)|浏览(129)

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
}
rwqw0loc

rwqw0loc1#

这句话解决了我的问题
DateFormatter.Locale=区域设置(标识符:“EN_US_POSIX”)

相关问题