NSDate对象接收具有不同值的前NSString

时间:2013-03-06 06:07:03

标签: iphone ios nsdate

我想获取本地设备时间并分配给字符串对象。

NSDate* currentDate = [NSDate date];
NSDateFormatter *dateformatter=[[NSDateFormatter alloc]init];
[dateformatter setDateFormat:@"d MMMM , yyyy"];
self.dateSting=[[NSMutableString alloc]init];
self.dateSting = [NSMutableString stringWithFormat:@"%@" ,[dateformatter stringFromDate:currentDate]];

收到的输出= 2013年3月6日

NSString转换为NSDate对象后面的代码

NSDateFormatter *uu=[[NSDateFormatter alloc]init];
[uu setDateFormat:@"d MMMM , yyyy"];

NSDate *yy=[uu dateFromString:self.dateSting];

输出recived = 2013-03-05 18:30:00 +0000 差异在几天之内。

3 个答案:

答案 0 :(得分:4)

嗯,解决方案非常简单。 NSDate始终显示GMT。 从您的个人资料中,我可以看到您当前的位置为INDIA,其中当地时区为GMT + 5.30小时。

您获得的当前输出为2013-03-05 18:30:00 +0000,如果您添加5.30小时,您将获得2013-03-06 00:00:00 +0000。请注意,在NSDate结束时,您可以看到类似+0000的内容,这会显示时区。

这是您的问题的原因/解决方案,如果您想知道如何解决它,answer is here

希望现在一切都很清楚。

答案 1 :(得分:1)

尝试这样的事情。

NSDate* currentDate = [NSDate date];
NSLog(@"%@",currentDate);
NSDateFormatter *dateformatter=[[NSDateFormatter alloc]init];
[dateformatter setDateFormat:@"d MMMM hh:mm:ss, yyyy"];

NSLog(@"%@",[dateformatter stringFromDate:currentDate]);

NSDate *yy=[dateformatter dateFromString:[dateformatter stringFromDate:currentDate]];
NSLog(@"%@",yy);

NSDateFormatter *uu=[[NSDateFormatter alloc]init];
[uu setDateFormat:@"d MMMM , yyyy"];

NSLog(@"%@",[uu stringFromDate:yy]);

由于GMT偏移,发生日期和时间的差异。 NSLogging NSDate为您提供偏移时间。偏移量显示要从日期添加或减去的值。在印度它的+5.30。始终确保保留偏移详细信息,因为如果不存在,可能会更改实际日期。希望这会有所帮助。

答案 2 :(得分:0)

dateWithString: 使用国际字符串表示格式(YYYY-MM-DD HH:MM:SS±HHMM)中给定字符串指定的日期和时间值创建并返回NSDate对象。

  • (id)dateWithString:(NSString *)aString 参数 ASTRING 以国际字符串表示格式-YYYY-MM-DD HH:MM:SS±HHMM指定日期和时间值的字符串,其中±HHMM是GMT小时和分钟的时区偏移量(例如,“2001-” 03-24 10:45:32 +0600“)。 您必须指定格式字符串的所有字段,包括时区偏移量,该字段必须具有加号或减号前缀。