如何从 NSDate 中删除时区偏移量
How to remove the timezone offset from an NSDate
我正在尝试从 NSDateFormatter 中获取 yyyy-MM-dd HH:mm
。
但是字符串吐出来Historical Date: 2016-08-23 14:03:00 +0000
我不想要秒数或 +0000。
我做错了什么?
int seconds = -( days * (24 * 60 * 60)); //24 hours, times 60 minutes, times 60 seconds
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd HH:mm"];
NSString* stringFromDate = [format stringFromDate:[NSDate date]];
NSDate * pastDate = [[format dateFromString:stringFromDate] dateByAddingTimeInterval:seconds];
NSLog(@"Date: %@", pastDate);
这是因为您正在打印 NSDate
对象。
NSDate
对象封装了一个时间点,它不负责它的字符串表示。
您真正需要做的是计算您需要的确切日期,然后将其格式化为 NSString
.
类似的东西:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
NSDate *pastDate = [[NSDate date] dateByAddingTimeInterval:seconds];
NSString *yourDateInString = [dateFormatter stringFromDate:pastDate];
NSLog(@"%@", yourDateInString);
此外,最好使用 NSCalendar
和 NSCalendarComponents
来处理日期并计算新日期,而不是仅仅添加时间间隔。
我先尝试了你的编码
int seconds = -( 24 * (24 * 60 * 60)); //24 hours, times 60 minutes, times 60 seconds
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd HH:mm"];
NSString* stringFromDate = [format stringFromDate:[NSDate date]];
NSDate * pastDate = [[format dateFromString:stringFromDate] dateByAddingTimeInterval:seconds];
NSLog(@"The pastDate is - %@",pastDate);
打印结果为
The pastDate is - 2016-07-31 14:30:00 +0000
NSDate gets +0000
然后我尝试使用字符串
NSString *stringDate = [format stringFromDate:pastDate];
NSLog(@"The Date is: %@", stringDate);
现在打印的结果是
The Date is: 2016-07-31 20:00
String does not have +0000
我正在尝试从 NSDateFormatter 中获取 yyyy-MM-dd HH:mm
。
但是字符串吐出来Historical Date: 2016-08-23 14:03:00 +0000
我不想要秒数或 +0000。
我做错了什么?
int seconds = -( days * (24 * 60 * 60)); //24 hours, times 60 minutes, times 60 seconds
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd HH:mm"];
NSString* stringFromDate = [format stringFromDate:[NSDate date]];
NSDate * pastDate = [[format dateFromString:stringFromDate] dateByAddingTimeInterval:seconds];
NSLog(@"Date: %@", pastDate);
这是因为您正在打印 NSDate
对象。
NSDate
对象封装了一个时间点,它不负责它的字符串表示。
您真正需要做的是计算您需要的确切日期,然后将其格式化为 NSString
.
类似的东西:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
NSDate *pastDate = [[NSDate date] dateByAddingTimeInterval:seconds];
NSString *yourDateInString = [dateFormatter stringFromDate:pastDate];
NSLog(@"%@", yourDateInString);
此外,最好使用 NSCalendar
和 NSCalendarComponents
来处理日期并计算新日期,而不是仅仅添加时间间隔。
我先尝试了你的编码
int seconds = -( 24 * (24 * 60 * 60)); //24 hours, times 60 minutes, times 60 seconds
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd HH:mm"];
NSString* stringFromDate = [format stringFromDate:[NSDate date]];
NSDate * pastDate = [[format dateFromString:stringFromDate] dateByAddingTimeInterval:seconds];
NSLog(@"The pastDate is - %@",pastDate);
打印结果为
The pastDate is - 2016-07-31 14:30:00 +0000
NSDate gets +0000
然后我尝试使用字符串
NSString *stringDate = [format stringFromDate:pastDate];
NSLog(@"The Date is: %@", stringDate);
现在打印的结果是
The Date is: 2016-07-31 20:00
String does not have +0000