【问题标题】:Getting Wrong Date from dateFormat从 dateFormat 获取错误的日期
【发布时间】:2018-10-08 11:50:34
【问题描述】:

对于日期输入“00/02/02”
格式样式为 yy/MM/dd
我得到了正确的输出,例如 02/01/2000

但问题是尝试使用“00/01/01”时 得到这样的输出 '01/01/12100'

但我不知道为什么今年会像 12100

我的代码是

let str = "00/01/01"

let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yy/MM/dd"
if let showDate = inputFormatter.date(from: str) {
   inputFormatter.dateFormat = "dd/MM/yyyy"
   let resultString = inputFormatter.string(from: showDate)
   print(resultString)
 }

年份输入类型始终为 yy 格式。

【问题讨论】:

  • 其实02/01/2000 不是 正确的输出 ????
  • 我的输出是01/01/2000...
  • @AhmadF 我没有得到 2000
  • @vadian 这是一个正确的输出,因为如果你没有给出完整的年份,那么它会从最近的世纪中获取它,意味着从 2000 年开始
  • 设置inputFormatter.defaultDate = Date(timeIntervalSinceReferenceDate: 0)(或任何其他日期)似乎也有帮助——不要问我为什么!

标签: swift date dateformatter


【解决方案1】:

根据@MartinR 的建议 将inputFormatter.defaultDate 设置为当前日期或 Date(timeIntervalSinceReferenceDate: 0) 效果很好

let str = "00/01/01"

let inputFormatter = DateFormatter()
inputFormatter.defaultDate = Date(timeIntervalSinceReferenceDate: 0)
inputFormatter.dateFormat = "yy/MM/dd"
if let showDate = inputFormatter.date(from: str) {
  inputFormatter.dateFormat = "dd/MM/yyyy"
 let resultString = inputFormatter.string(from: showDate)
 print(resultString)
 }

【讨论】:

    【解决方案2】:

    我设法通过在获取日期之前将格式化程序的时区设置为您的本地时区来重现此错误:

    inputFormatter.timeZone = TimeZone(identifier: "Asia/Kolkata")
    //Or
    inputFormatter.timeZone = TimeZone(identifier: "Asia/Calcutta") 
    

    它们都指向01/01/12100

    实际上,使用yy/MM/dd hh:mm:ss 的日期格式,从00/01/01 00:00:0000/01/01 05:29:59 的所有日期都会给出12100 的年份部分。这是因为加尔各答的时区从格林威治标准时间偏移了 +05H30。这是一个错误。

    将时区设置为 UTC 会产生所需的输出:

    inputFormatter.timeZone = TimeZone(identifier: "UTC")  //01/01/2000
    

    其他时区也会出现此错误:

    inputFormatter.timeZone = TimeZone(identifier: "Africa/Addis_Ababa")
    inputFormatter.timeZone = TimeZone(identifier: "Europe/Moscow")
    inputFormatter.timeZone = TimeZone(identifier: "Asia/Hong_Kong")
    

    基本上所有具有 GMT + hh:mm

    的时区

    【讨论】:

      猜你喜欢
      • 2014-06-13
      • 2014-01-28
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 2016-08-01
      相关资源
      最近更新 更多