我有一个代表NSTimeInterval
的双精度值。我想从double值创建正确的日期,这是我的代码。我得到了输出,但实际值有一些变化。
NSString *modiDate = [NSString stringWithFormat:@"1338229800"]; //example time interval value
NSNumber *time = [NSNumber numberWithDouble:([modiDate doubleValue] - 3600)];
NSTimeInterval interval = [time doubleValue];
NSDate *online = [NSDate date];
online = [NSDate dateWithTimeIntervalSince1970:interval];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];
NSLog(@"result: %@", [dateFormatter stringFromDate:online]);
这里出了什么问题?有什么想法吗?
修改
为了进行测试,我首先将日期转换为NSTimeInterval
并尝试取回日期。
这是代码和输出。
NSString *modDate = [NSString stringWithFormat:@"5/30/2012 2:02:55 PM"];
NSDateFormatter *format = [[NSDateFormatter alloc]init];
[format setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];
NSDate *dateFromString1 = [[NSDate alloc] init];
dateFromString1 = [format dateFromString:modDate];
[format release];
NSTimeInterval timeInterval1 = [dateFromString1 timeIntervalSince1970];
NSLog(@"timeinterval : %f",timeInterval1);
NSDate *online = [NSDate date];
online = [NSDate dateWithTimeIntervalSince1970:timeInterval1];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];
NSLog(@"result: %@", [dateFormatter stringFromDate:online]);
,输出为:
result: 05/30/2012 12:02:55 PM actual date:5/30/2012 2:02:55 PM
答案 0 :(得分:4)
首先,NSTimeInterval是一个浮点数,因此您不需要使用NSString或NSNumber(NSNumber用于在字典或数组中存储数字)。
您可以将代码简化为:
NSTimeInterval interval = 1338229800;
interval -= 3600;
NSDate *online = [NSDate dateWithTimeIntervalSince1970:interval];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];
NSLog(@"result: %@", [dateFormatter stringFromDate:online]);
这给了我:05/28/2012 19:30:00 PM
它对应于初始值:1338229800减1小时( - 3600秒)。
编辑:
在你的编辑中,你的写作:
NSString *modDate = [NSString stringWithFormat:@"5/30/2012 2:02:55 PM"];
NSDateFormatter *format = [[NSDateFormatter alloc]init];
[format setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];
但你应该检查the date format paterns page:
2:02:55 PM
对应@"h:mm:ss a"
,而不是 "HH:mm:ss aaa"
答案 1 :(得分:1)
这段代码有很多问题:
为什么要创建所有这些对象:
NSString *modiDate = [NSString stringWithFormat:@"1338229800"]; //example time interval value
NSNumber *time = [NSNumber numberWithDouble:([modiDate doubleValue] - 3600)];
NSTimeInterval interval = [time doubleValue];
如果相同:
NSString *modiDate = [NSString stringWithFormat:@"1338229800"];
NSTimeInterval interval = [modiDate doubleValue] - 3600;
在这里你要确定一个新的在线日期:
NSDate *online = [NSDate date];
仅在此处将其他日期设置为在线:
online = [NSDate dateWithTimeIntervalSince1970:interval];
你应该这样做:
NSDate *online = [NSDate dateWithTimeIntervalSince1970:interval];
我确定您对此代码的问题,但它可以正常工作。 您可能想要设置区域设置,而不是真正需要,但可能会对本地化产生一些影响:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.locale = [NSLocale systemLocale];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss aaa"];
NSLog(@"result: %@", [dateFormatter stringFromDate:online]);
从编辑中添加了新代码
在您的编辑中,您添加了以下代码:
NSDate *dateFromString1 = [[NSDate alloc] init];
dateFromString1 = [format dateFromString:modDate];
在这里你泄漏了一个NSDate
对象,只需这样做:
NSDate *dateFromString1 = [format dateFromString:modDate];
在martin的答案中陈述的问题是时间格式字符串。
答案 2 :(得分:0)
你正在使用24小时的HH。而是使用适合AM / PM格式的hh(0-12)。