当我将字符串格式化为日期时出现错误的日期

Posted

技术标签:

【中文标题】当我将字符串格式化为日期时出现错误的日期【英文标题】:Wrong Date coming when i formatting the string to date 【发布时间】:2018-10-23 07:04:46 【问题描述】:

当我尝试格式化字符串到日期时,我得到了一天,但输出显示不同的日期,请任何人帮忙。

    let my_date = "22-03-1995"
    let dateformat = DateFormatter()
    dateformat.dateFormat = "DD-MM-yyyy"
    let date = dateformat.date(from: my_date)
    print(date!)
    text_lbl.text = "\(date!)" 

我的输出是:1995-01-21 是这样的。

【问题讨论】:

DD,大写的D 表示一年中的某一天,而不是月份的某一天。请参阅文档:unicode.org/reports/tr35/tr35-31/… 一旦修复,您可能会有“一天的差异”,这是由于 TimeZone。 @Larme 感谢您在这里的快速回复 因为这是一个Date 对象。这很正常。如果您想要自定义“日期表示 UX”,则需要使用自定义 dateFormat 指定所需格式。所以目前,使用相同的DateFormatter,并将其dateFormat 更改为您想要的。 【参考方案1】:

你应该使用

let my_date = "22-03-1995"
let dateformat = DateFormatter()
dateformat.dateFormat = "dd-MM-yyyy"
let date = dateformat.date(from: my_date)
print(date!)

这会给你1995-03-22 00:00:00 +0000作为结果

【讨论】:

感谢您的快速回复 let my_date = "22-03-1995" let dateformat = DateFormatter() dateformat.dateFormat = "dd-MM-yyyy" let date = dateformat.date(from: my_date ) print(date!) text_lbl.text = "(date!)" 但是还是来错了日期。 更改格式后,您会得到什么响应?【参考方案2】:
func changeDateFormatFor(date : String,fromFormat : String = "dd-MM-yyyy", toFormat : String = "yyyy-MM-dd")-> String
if date == "" 
    return ""

dateFormatter.dateFormat = fromFormat
let date1 = dateFormatter.date(from: date)
dateFormatter.dateFormat = toFormat
let str = dateFormatter.string(from: date1!)
return str

【讨论】:

如果答案解释问题和解决方案,而不是只转储一些代码,则答案会更有帮助(对 OP 和 Q&A 的未来读者)。

以上是关于当我将字符串格式化为日期时出现错误的日期的主要内容,如果未能解决你的问题,请参考以下文章

Java/Groovy - 简单的日期重新格式化

如何在IOS中将日期格式化为字符串,如“一天前”、“分钟前”?

使用日期时间和时区时出现代码问题

如何在 SQL Server 中将字符串转换为日期时间?

jdbcTemplate 查询行映射日期列一般

TypeError: Django中日期范围的预期字符串或类似字节的对象错误。