这是我用来更改日期格式的代码
NSLog(@"newBirthDates%@",_newwBirthDates);
NSDateFormatter *Form = [[NSDateFormatter alloc] init];
[Form setDateFormat:@"MM/dd"];
NSDate *date1 =[NSDate date];
NSString *string =[Form stringFromDate:date1];
NSLog(@"string%@",string);
NSDate *todaydate =[Form dateFromString:string];
NSLog(@"todaydate%@",todaydate);
这就是我得到的输出
newBirthDates(
"05/22",
"07/11",
"10/07",
"02/20"
)
newBirthDates(
"05/22",
"07/11",
"10/07",
"02/20"
)
string03/18
todaydate1970-03-17 18:30:00 +0000
现在我的问题是为什么3/18成为03/17?为什么有一天会减少
答案 0 :(得分:4)
答案很简单 - 时区。
仔细看看NSLog
打印出来的内容
1970-03-17 18:30:00
+0000
默认情况下,NSDateFormatter
设置为您当地的时区。这意味着,如果您的时区为+5:30
,则为其提供日期“1970/18/3”会产生1970-03-18 00:00:00
+0530
。
但是,NSLog
始终以GMT(零)时区打印日期,添加/减去时区差异(5小时30分钟)。
基本上,没有什么可以修复的,如果你想用它来检查NSLog
值,你只需要了解NSDate
的工作原理。
答案 1 :(得分:1)
您的日志按字符串值显示,消除了所有重要的时区差异。
NSDate
的日志显示GMT的时间。
这两个值都是正确的。
NSDate的唯一原始方法,timeIntervalSinceReferenceDate, 为NSDate接口中的所有其他方法提供了基础。 此方法返回相对于绝对引用的时间值 日期 - 格林威治标准时间2001年1月1日的第一个瞬间。
您必须阅读NSDate Documentation。
答案 2 :(得分:1)
获取正确的日期,您可以使用此日期,
NSDateFormatter *Form = [[NSDateFormatter alloc] init];
[Form setDateFormat:@"MM/dd"];
[Form setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *date1 =[NSDate date];
NSString *string =[Form stringFromDate:date1];
NSLog(@"string%@",string);
NSDate *todaydate =[Form dateFromString:string];
NSLog(@"todaydate%@",todaydate);
上面的代码会给出正确的日期。
答案 3 :(得分:1)
主要是 TimeZone :[Form setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
这是正确的代码:
NSDateFormatter *Form = [[NSDateFormatter alloc] init];
[Form setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[Form setDateFormat:@"MM/dd"];
NSDate *date =[NSDate date];
NSString *string =[Form stringFromDate:date];
NSDate *todaydate = [Form dateFromString:string];
NSLog(@"todaydate %@",todaydate);