0

这是我用来更改日期格式的代码

      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?为什么一天会减少

4

4 回答 4

4

答案很简单——时区。仔细看看NSLog打印出来的内容
1970-03-17 18:30:00 +0000

默认情况下,aNSDateFormatter设置为您的本地时区。这意味着,如果您的时区+5:30给它一个日期“1970/18/3”,则结果为1970-03-18 00:00:00 +0530. 但是,NSLog始终以 GMT(零)时区打印日期,加上/减去时区差异(5 小时 30 分钟)。

基本上,没有什么可修复的,NSLog如果你想用它来检查NSDate值,你只需要了解它是如何工作的。

于 2013-03-18T13:10:55.590 回答
1

您的日志按字符串值显示,消除了所有重要的时区差异。

日志NSDate显示您从 GMT 开始的时间。

并且这两个值都是正确的。

NSDate 的唯一原始方法 timeIntervalSinceReferenceDate 为 NSDate 接口中的所有其他方法提供了基础。此方法返回一个相对于绝对参考日期的时间值——格林威治标准时间 2001 年 1 月 1 日的第一个瞬间。

您必须阅读NSDate 文档

于 2013-03-18T13:06:19.373 回答
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);

上面的代码将给出正确的日期。

于 2013-03-18T13:10:08.530 回答
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);
于 2013-03-18T13:11:12.097 回答