代码之家  ›  专栏  ›  技术社区  ›  Gagan_iOS

来自服务器的Swift日期

  •  5
  • Gagan_iOS  · 技术社区  · 6 年前

    在转换来自日期服务器的日期字符串时,我面临一个问题。下面是我的代码

    let dateString = "2017–04–02T13:10:00.000"  //Date coming from server
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'hh:mm:ss.SSS"
    let date =  dateFormatter.date(from: dateString)
    print("date is :\(String(describing: date))")
    

    但日志是

    date is :nil
    

    *24小时格式更新

    以下是24小时格式(hh)的更新

    let dateString = "2017–04–02T13:10:00.000"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
    let date =  dateFormatter.date(from: dateString)
    

    但同样的结果

    我试过这些链接

    Link1 Link2 Link3

    但是没有成功。

    请告诉我上面的代码有什么问题。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Krunal    6 年前

    回答你的问题:不要在键盘上键入连字符/破折号或符号。只需从控制台窗口复制(Web服务响应打印语句并以日期格式粘贴)

    试试看:

    let dateString = "2017–04–02T13:10:00.000"  //Date coming from server
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy–MM–dd'T'HH:mm:ss.SSS"
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    let date =  dateFormatter.date(from: dateString)
    print("date is :\(String(describing: date))")
    

    结果: 日期:可选(2017-04-02 07:40:00+0000)

    还要注意,您有时区问题。原始日期字符串不提供任何特定时区。所以您需要决定字符串代表什么时区。因为它来自服务器,所以最有可能是在UTC时间。如果是这样,您需要设置 timeZone 日期格式化程序的属性。否则,字符串将被解析为用户本地时间。

    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    

    学分: Martin R
    服务器字符串包含“en-dash”(U+2013)作为分隔符,而不是普通的连字符(减号)。

    (根据建议 Leo Dabus ,设置日期格式设置工具的区域设置标识符-“en_-us-posix”。