按照一贯的做法 代码如下
- (NSString *)getNowDate{
NSDate *date = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: date];
NSDate *nowDate = [date dateByAddingTimeInterval: interval];
NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"YYYY-MM-dd"];
NSString * locationString =[dateformatter stringFromDate:nowDate];
return locationString;
}
我以为这样就行了 但是当北京(亚洲-上海)时间 过了16点 就显示另一天的了
这样肯定是不行的 因为很多时候我们需要的是查询当天的数据 在网上找了下 发现少了一句代码
解决办法
- (NSString *)getNowDate{
NSDate *date = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: date];
NSDate *nowDate = [date dateByAddingTimeInterval: interval];
NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"YYYY-MM-dd"];
[dateformatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSString * locationString =[dateformatter stringFromDate:nowDate];
return locationString;
}
做项目时 经常发现需要查询一个月、三个月 或者半年的数据 与时间打交道 绕来绕去的确实烦 如下代码 复制粘贴 好用
//比当前日期少三个月
- (NSDate *)getDate{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date]; //当前时间
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
NSDate *startDate = [calendar dateFromComponents:components]; //今天0点时间
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitMonth value:-3 toDate:startDate options:0];
// NSDate *date = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: endDate];
NSDate *lastDate = [endDate dateByAddingTimeInterval: interval];//三个月之前的日期
return lastDate;
}
当然 根据这个方法 我们不难得出另外的 例如 比当前日期少3天 少一个星期 代码如下
//比当前日期少一个星期
- (NSDate *)getToSevenDay{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date]; //当前时间 NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
NSDate *startDate = [calendar dateFromComponents:components];
//今天0点时间
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:-7 toDate:startDate options:0];
// NSDate *date = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: endDate];
NSDate *lastDate = [endDate dateByAddingTimeInterval: interval];
//七天之前的日期
return lastDate;
}
另外选择日期时 我建议用pickview 这个看起来不那么别扭 之前我也是在界面上弹出一个view 然后选择时间 太难看了
使用选择器 显示的样式截图如下 有关用法 我之前的blog有写
//离当天有几天 例如今天2017-05-12 传入1 那么返回的是2017-05-11
- (NSString *)getTimeWithIntDay:(NSInteger)day{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
NSDate *startDate = [calendar dateFromComponents:components];
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:-day toDate:startDate options:0];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd"];
return [dateFormatter stringFromDate:endDate];
}
当然如果要获取当前时间 那么上述方法传入0就OK了 方便实用 没时差