ios Swift中的日期格式设置程序无法正常工作

qjp7pelc  于 2023-01-10  发布在  iOS
关注(0)|答案(2)|浏览(150)

我在Swift中使用日期。我必须将字符串转换为日期,但发生了一些奇怪的事情。当我在模拟器上运行代码并将日期字符串传递给格式化程序时,它返回nil。但当我在物理设备上运行代码时,它工作得很好。

class ChatViewController: MessagesViewController {
    
    var uid: String
    var isNewConversations:Bool
    private var messages = [Message]()
    private var selfSender: Sender?
    var senderUid: String
    var conversation_Id: String?
    
    public static let dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateStyle = .medium
        formatter.timeStyle = .long
        formatter.locale = .current
        return formatter
    }()
}

我是这样使用它的

let date = ChatViewController.dateFromatter.date(from: dateString)

我在字符串中输入的日期是:“2023年1月8日晚上8:57:10 GMT+5”
我只是调试了整个代码,但我没有得到发生了什么。当我在物理设备上调试它时,它工作得很好,但当我在模拟器上运行它时,它工作得不好,即调试器显示在“日期”变量中你得到了零。

ozxc1zmp

ozxc1zmp1#

解析日期字符串时,切勿使用dateStyle和/或timeStyle。始终使用dateFormat。样式可能会因用户的区域设置和设备上的其他设置而异,也可能因用户的语言而异。
由于需要解析固定格式的日期字符串,因此需要提供特定的日期格式。由于固定格式的日期字符串始终为英语,因此还必须在日期格式化程序中使用特殊的区域设置。

public static let dateFormatter: DateFormatter = {
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.dateFormat = "dd-MMM-yyyy 'at' h:mm:ss a Z" // Might need O instead of Z at the end.
    return formatter
}()
5rgfhyps

5rgfhyps2#

下面这个日期格式化程序如何:

let customFormatter: DateFormatter = {
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.dateFormat = "dd-MMM-yyyy' at 'h:mm:ss a ZZZZ"
    return formatter
}()

相关问题