//
|
// DateUtil.m
|
// airtree
|
//
|
// Created by WindShan on 2016/11/17.
|
// Copyright © 2016年 Gloria. All rights reserved.
|
//
|
|
#import "DateUtil.h"
|
|
#define YMDFormat @"YYYY-MM-dd"
|
#define YMDEHMFormat @"YYYY-MM-dd EEE HH:mm"
|
#define YMDHMSFormat @"YYYY-MM-dd HH:mm:ss"
|
|
static NSDateFormatter *s_formatterYMD = nil;
|
static NSDateFormatter *s_formatterYMDEHM = nil;
|
static NSDateFormatter *s_formatterYMDHMS = nil;
|
|
@implementation DateUtil
|
|
+ (NSDate *)adjustDateHour:(NSDate *)srcDate
|
minHour:(NSUInteger)minHour
|
maxHour:(NSUInteger)maxHour
|
fitHour:(NSUInteger)fitHour
|
{
|
//参数有效性检查
|
if (srcDate == nil) {
|
return srcDate;
|
}
|
if (minHour >= 24 || maxHour >= 24 || fitHour >=24) {
|
minHour %= 24;
|
maxHour %= 24;
|
fitHour %= 24;
|
}
|
|
NSInteger unitFlags = NSHourCalendarUnit;
|
NSCalendar *calendar = [NSCalendar currentCalendar];
|
NSDateComponents *componets = [calendar components:unitFlags fromDate:srcDate];
|
NSInteger hour = [componets hour];
|
|
if (hour <= minHour) {
|
//(NSInteger)(fitHour-hour)*60*60:必须先转为NSInteger,否则无符号相减后的负数是自动转换为非常大的double类型
|
srcDate = [srcDate dateByAddingTimeInterval:(NSInteger)(fitHour-hour)*60*60];
|
}
|
else if (hour >= maxHour) {
|
srcDate = [srcDate dateByAddingTimeInterval:(24+fitHour-hour)*60*60];
|
}
|
|
return srcDate;
|
}
|
|
+ (NSString *)stringFromDate:(NSDate *)date
|
formater:(NSDateFormatter * __strong *)formatter
|
format:(NSString *)format
|
{
|
if (*formatter == nil) {
|
*formatter = [[NSDateFormatter alloc] init];
|
|
[*formatter setLocale:[NSLocale currentLocale]];
|
[*formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];
|
[*formatter setDateStyle:NSDateFormatterMediumStyle];
|
[*formatter setTimeStyle:NSDateFormatterShortStyle];
|
[*formatter setDateFormat:format];
|
}
|
|
return [*formatter stringFromDate:date];
|
}
|
|
+ (NSDate *)dateFromString:(NSString *)dateString
|
formater:(NSDateFormatter * __strong *)formatter
|
format:(NSString *)format
|
{
|
if (dateString.length <= 0) {
|
return [NSDate date];
|
}
|
if (*formatter == nil) {
|
*formatter = [[NSDateFormatter alloc] init];
|
|
[*formatter setLocale:[NSLocale currentLocale]];
|
[*formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];
|
[*formatter setDateStyle:NSDateFormatterMediumStyle];
|
[*formatter setTimeStyle:NSDateFormatterShortStyle];
|
[*formatter setDateFormat:format];
|
}
|
|
return [*formatter dateFromString:dateString];
|
}
|
|
|
+ (NSString *)stringFromDateYMD:(NSDate *)date
|
{
|
return [DateUtil stringFromDate:date formater:&s_formatterYMD format:YMDFormat];
|
}
|
|
+ (NSDate *)dateFromStringYMD:(NSString *)dateString
|
{
|
return [DateUtil dateFromString:dateString formater:&s_formatterYMD format:YMDFormat];
|
}
|
|
+ (NSString *)stringFromDateYMDEHM:(NSDate *)date
|
{
|
return [DateUtil stringFromDate:date formater:&s_formatterYMDEHM format:YMDEHMFormat];
|
}
|
|
+ (NSDate *)dateFromStringYMDEHM:(NSString *)dateString
|
{
|
return [DateUtil dateFromString:dateString formater:&s_formatterYMDEHM format:YMDEHMFormat];
|
}
|
|
+ (NSString *)stringFromDateYMDHMS:(NSDate *)date
|
{
|
return [DateUtil stringFromDate:date formater:&s_formatterYMDHMS format:YMDHMSFormat];
|
}
|
|
+ (NSDate *)dateFromStringYMDHMS:(NSString *)dateString
|
{
|
return [DateUtil dateFromString:dateString formater:&s_formatterYMDHMS format:YMDHMSFormat];
|
}
|
|
+ (NSString *)getYear:(NSDate *)date
|
{
|
NSCalendar *calendar = [NSCalendar currentCalendar];
|
NSDateComponents *comps = nil;
|
|
/*
|
// 年月日获得
|
comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit |
|
NSDayCalendarUnit
|
fromDate:date];
|
*/
|
comps = [calendar components:NSYearCalendarUnit fromDate:date];
|
NSString *year = [NSString stringWithFormat:@"%@", @([comps year])];
|
|
return year;
|
}
|
|
+ (NSString *)getMonth:(NSDate *)date
|
{
|
NSCalendar *calendar = [NSCalendar currentCalendar];
|
NSDateComponents *comps = nil;
|
|
comps = [calendar components:NSMonthCalendarUnit fromDate:date];
|
NSString *month = [NSString stringWithFormat:@"%@", @([comps month])];
|
|
return month;
|
}
|
|
+ (NSString *)getDay:(NSDate *)date
|
{
|
NSCalendar *calendar = [NSCalendar currentCalendar];
|
NSDateComponents *comps = nil;
|
|
comps = [calendar components:
|
NSDayCalendarUnit fromDate:date];
|
NSString *day = [NSString stringWithFormat:@"%@", @([comps day])];
|
|
return day;
|
}
|
|
+ (NSString *)stringFromLong:(long)date
|
{
|
NSDate *dateTime = [[NSDate alloc] initWithTimeIntervalSinceNow:date/1000];
|
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
|
[formatter setTimeStyle:NSDateFormatterNoStyle];
|
[formatter setDateStyle:NSDateFormatterMediumStyle];
|
NSLocale *formatterLocal = [[NSLocale alloc] initWithLocaleIdentifier:@"en_us"];
|
[formatter setLocale:formatterLocal];
|
[formatter setDateFormat:@"yyyy-MM-dd HH:mm"];
|
NSString *dateString = [formatter stringFromDate:dateTime];
|
|
return dateString;
|
}
|
|
//获取指定时间前n天的时间日期 2015-10-30
|
+ (NSString *)stringFromOffDateYMD:(NSDate *)date dayCount:(int)day
|
{
|
NSTimeInterval time = day * 24 * 60 * 60;//n天的秒数
|
//得到一年之前的当前时间(-:表示向前的时间间隔(即去年),如果没有,则表示向后的时间间隔(即明年))
|
NSDate * lastDateTime = [date dateByAddingTimeInterval:time];
|
|
return [DateUtil stringFromDateYMD:lastDateTime];
|
}
|
|
//是否是今天
|
+ (BOOL)isToday:(NSString *)dateString
|
{
|
NSString *nowString = [DateUtil stringFromDateYMD:[NSDate date]];
|
return [nowString isEqualToString:dateString];
|
}
|
|
@end
|