首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从dateFormat获取错误日期

从dateFormat获取错误日期
EN

Stack Overflow用户
提问于 2018-10-08 11:50:34
回答 2查看 236关注 0票数 0

关于日期输入"00/02/02"

形成方式为yy/MM/dd

我得到了正确的输出,如02/01/2000

但问题是,当"00/01/01“得到像'01/01/12100‘这样的输出时

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

我的代码是

代码语言:javascript
复制
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格式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-08 12:28:49

根据@MartinR建议,settinginputFormatter.defaultDate到当前日期或日期(timeIntervalSinceReferenceDate: 0),其工作正常

代码语言:javascript
复制
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)
 }
票数 1
EN

Stack Overflow用户

发布于 2018-10-08 16:43:05

在从格式化程序获取日期之前,我设法将格式化程序的时区设置为本地时区,从而复制了此bug:

代码语言:javascript
复制
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将产生所需的输出:

代码语言:javascript
复制
inputFormatter.timeZone = TimeZone(identifier: "UTC")  //01/01/2000

此错误也发生在其他时区:

代码语言:javascript
复制
inputFormatter.timeZone = TimeZone(identifier: "Africa/Addis_Ababa")
inputFormatter.timeZone = TimeZone(identifier: "Europe/Moscow")
inputFormatter.timeZone = TimeZone(identifier: "Asia/Hong_Kong")

基本上所有具有GMT + hh:mm的时区

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52701626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档