我试图从字符串中获取NSDate
个对象。我使用了以下代码
NSString *st1=@"4:39 AM";
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm a"];
NSDate *dateobj=[dateFormatter dateFromString:st1];
NSLog(@"Date from string 4:39 AM is %@",dateobj);
但它提供了错误的输出,如
字符串4:39 AM的日期是1969-12-31 23:09:00 +0000
从这种类型的字符串中获取NSDate
对象的确切方法是什么。
答案 0 :(得分:4)
不要将结果基于NSLoging NSDate
,因为记录它会给你GMT的时间
请参阅我对这个问题NSDateFormatter giving me time 4 hours ahead
例如,如果您想在凌晨4:39触发UILocalNotification
,您可以执行以下操作
NSCalendar* myCalendar = [NSCalendar currentCalendar];
NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
fromDate:[NSDate date]];
//4:39 Am
[components setHour: 4]; //4 am
[components setMinute: 39];//39 minutes
[components setSecond: 0];// 0 seconds
NSDate *myDate = [myCalendar dateFromComponents:components];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM dd, yyyy h:mma"];
NSString *str = [formatter stringFromDate:myDate];
NSLog(@"date is %@", myDate); //This will log the correct data but in GMT time zone
NSLog(@"date is %@", str); //This will log the correct data
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = myDate;
答案 1 :(得分:2)
这是对的。您确实只指定了时间而不是日期。这样,日期被假定为计算机时代1970/1/1(计算机零时间)的开始。 NSLog
然后根据您的时区(GMT-5)显示它。
如果您想要更好的答案,则必须指定所需的输出。代码是正确的,结果也是正确的。