记录这几天调试的一个bug----时间戳问题
2020-12-30 本文已影响0人
大宝的爱情
一,获取当前时间字符串
+ (NSString *)getCurrentDate {
NSDate *currentDate = [NSDate date]; // 获取当前时间,日期
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; // 创建一个时间格式化对象
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // 设定时间格式,这里可以设置成自己需要的格式
NSString *dateString = [dateFormatter stringFromDate:currentDate]; // 将时间转化成字符串
return dateString;
}
二,获取当前时间戳字符串
+ (NSString *)getCurrentTimestamp {
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:0]; // 获取当前时间0秒后的时间
NSTimeInterval time = [date timeIntervalSince1970]*1000;// *1000 是精确到毫秒(13位),不乘就是精确到秒(10位)
NSString *timeString = [NSString stringWithFormat:@"%.0f", time];
return timeString;
}
三,问题
好了,时间获取介绍到这,那么问题来了,bug是什么?
bug就是直接用了别人封装的时间工具类,时间格式的年份写的是YYYY,而非yyyy,下边说一下区别问题就迎刃而解了
YYYY是以周来计算年的,意思是当天所在周属于的年份,一周从周日开始算计算,周六结束,只要本周跨年,那么这一周就算下一年的。
也就是说:年份如果用Y会是这周的年份,y才是标准的年份。
以后转换日期格式的时候记得用“yyyy-MM-dd”这种格式,避免出现上传时间的错误
使用DateFormatter转换时间格式,需要的参数如下:
G: 公元时代,例如AD公元
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-12
MMM: 月,显示为英文月份简写,如 Jan
MMMM: 月,显示为英文月份全称,如 Janualy
dd: 日,2位数表示,如02
d: 日,1-2位显示,如 2
EEE: 简写星期几,如Sun
EEEE: 全写星期几,如Sunday
aa: 上下午,AM/PM
H: 时,24小时制,0-23
K:时,12小时制,0-11
m: 分,1-2位
mm: 分,2位
s: 秒,1-2位
ss: 秒,2位
S: 毫秒
常用日期结构:
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
MM dd yyyy
涉及到上传时间的问题,如果将y写成Y,则这个时间在平常都是好的,只有在阳历每年的最后一周才会出现bug,bug呈现就是将时间多加了一年。