2013-03-18 31 views
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成为3月17日?为什么有一天会减少

+1

一个技巧:始终保存在可变/数据库完整的日期,只有甲酸盐他们表示,当用户界面,在你的特定情况下,这可能是因为你没有在日期字符串中保存/获取年份。 – 2013-03-18 13:02:03

+0

只添加了一个可能的重复项,但使用'NSLog'检查日期是否正确的问题已经被回答了很多次。 – Sulthan 2013-03-18 13:03:49

回答

3

答案很简单 - 时区。 采取什么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的值。

+0

这个人是谁?哈哈哈谢谢你,但是什么是解决方案?我们现在知道nslog如何工作,但如何解决这个问题?我只在数组中添加单日期,这是今天,然后在计算机中,我设置日期为03/17 11.59下午,是的,如果代码库日期条件不一样明显,他们不会是相同现在用户正在与应用程序睡觉关闭,然后轮到12日上午意味着18日,为什么我不收到通知? – user1660882 2013-03-18 13:23:27

+0

对不起,你我开始谈论一些其他的事情而忽略它 – user1660882 2013-03-18 13:25:38

1

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

NSDate的日志显示了GMT之前的时间。

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

的NSDate,timeIntervalSinceReferenceDate的唯一原始的方法, 提供在的NSDate界面中的所有其他方法的基础。 此方法返回一个相对于绝对参考日期的时间值 日期 - 格林威治标准时间2001年1月1日的第一个时刻。

您必须阅读NSDate Documentation

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); 

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

1

主要的是时区[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); 
相关问题