更改日期格式时获取错误日期

Posted

技术标签:

【中文标题】更改日期格式时获取错误日期【英文标题】:Getting wrong date on changing date format 【发布时间】:2015-01-21 08:59:05 【问题描述】:

我在更改日期格式时弄错了日期,我正在使用以下代码

NSDateFormatter * formatter =  [[NSDateFormatter alloc] init];

[formatter setDateFormat:@"MMM dd, YYYY"];

NSDate * theDate = [NSDate dateWithTimeIntervalSince1970:1419929948.7490001];

NSString * dateStr = [formatter stringFromDate:theDate];

输出 -

theDate is : 2014-12-30 08:59:08 +0000
dateStr is : Dec 30, 2015

谢谢

【问题讨论】:

【参考方案1】:

您想使用yyyy 而不是YYYY。小的y 是日历年,而大写的Y 是“一年中的一周”中的年份。

下面是the specification的解释。

F.4 一年中的一周

对于公历,为年份字段计算的值范围为 1 到 53(对于其他日历,它们可能具有不同的范围)。一年的第 1 周是从该年起至少包含指定最小天数的第一周。一年的第 1 周和下一年的第 1 周之间的周按从 2 到 52 或 53 的顺序编号(如果需要)。例如,1998 年 1 月 1 日是星期四。如果一周的第一天是 MONDAY,一周的最少天数是 4(这些值反映了 ISO 8601 和许多国家标准),那么 1998 年的第 1 周从 1997 年 12 月 29 日开始,到 1 月 4 日结束, 1998. 但是,如果一周的第一天是星期日,则 1998 年的第 1 周从 1998 年 1 月 4 日开始,到 1998 年 1 月 10 日结束。1998 年的前三天是 1997 年第 53 周的一部分。

【讨论】:

【参考方案2】:

更改以下行代码。

[formatter setDateFormat:@"MMM dd, yyyy"];

输出是:

【讨论】:

【参考方案3】:

使用下面一行

[格式化程序 setDateFormat:@"MMM dd, yyyy"];

【讨论】:

【参考方案4】:

按类别分类

+ (NSString *)dateStampFromDate:(NSDate *)date

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"MMM dd, yyyy"];
    NSString *timeStamp = [dateFormatter stringFromDate:date];
    return timeStamp;

【讨论】:

以上是关于更改日期格式时获取错误日期的主要内容,如果未能解决你的问题,请参考以下文章

更改电脑日期显示格式

从日期字段中删除时间值并在从数据库中获取数据时更改格式

在运行时更改系统日期格式时更新 DatePicker 中的日期格式

如何更改 Oracle BI Publisher 中的日期格式?

SwiftUI DatePicker 在更改日期时在短日期格式和中日期格式之间跳转

DB2日期格式更改的方法