版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013943420/article/details/83186665
0. 说明
-
支持时间戳与日期、日期和字符串的相互转换;
-
支持日期转星期;
-
支持以下时间段判断:一分钟内、一小时内、昨天、今天、明天、今年;
1. 具体代码
//
// NSDateExt.h
// SwiftExercises
//
// Created by ADreamClusive on 20/11/2017.
// Copyright © 2017 ADreamClusive. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSDate (ZL)
/** 判断是否是一分钟内 */
- (BOOL)isInOneMinute;
/** 判断是否是一小时内 */
- (BOOL)isInOneHour;
/** 判断是否是昨天 */
- (BOOL)isYesterday;
/** 判断是否是今天 */
- (BOOL)isToday;
/** 判断是否是明天 */
- (BOOL)isTomorrow;
/** 判断是否是今年 */
- (BOOL)isThisYear;
/** 日期字符串转时间戳 */
+ (NSInteger)timestampFromDateString:(NSString *)dateStr format:(NSString *)format;
/** 时间戳转日期字符串 */
+ (NSString *)stringFromTimestamp:(NSInteger)timeStamp withDateFormat:(NSString *)format;
/** 日期转字符串 */
+ (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format;
/** 字符串转日期 */
+ (NSDate *)dateFromString:(NSString *)dateString format:(NSString *)format;
/** 日期转week */
+ (NSString*)weekdayStringFromDate:(NSDate*)inputDate;
@end
//
// NSDateExt.m
// SwiftExercises
//
// Created by ADreamClusive on 20/11/2017.
// Copyright © 2017 ADreamClusive. All rights reserved.
//
#import "NSDateExt.h"
static NSDateFormatter *formatter_;
@implementation NSDate (ZL)
// 第一次使用这个类的时候调用
// 优化性能,减少频繁的创建格式化对象
+ (void)initialize {
[super initialize];
formatter_ = [[NSDateFormatter alloc] init];
}
#pragma mark - 日期时间间隔判断
- (BOOL)isInOneMinute
{
formatter_.dateFormat = @"yyyyMMddHHmm";
NSString *selfSecond = [formatter_ stringFromDate:self];
NSString *nowSecond = [formatter_ stringFromDate:[NSDate date]];
return [selfSecond isEqualToString:nowSecond];
}
- (BOOL)isInOneHour
{
formatter_.dateFormat = @"yyyyMMddHH";
NSString *selfHour = [formatter_ stringFromDate:self];
NSString *nowHour = [formatter_ stringFromDate:[NSDate date]];
return [selfHour isEqualToString:nowHour];
}
- (BOOL)isYesterday
{
formatter_.dateFormat = @"yyyyMMdd";
NSString *selfDay = [formatter_ stringFromDate:self];
NSString *nowDay = [formatter_ stringFromDate:[NSDate date]];
NSDate *selfDate = [formatter_ dateFromString:selfDay];
NSDate *nowDate = [formatter_ dateFromString:nowDay];
NSCalendar *calendar_ = [NSCalendar currentCalendar];
NSCalendarUnit units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *cmp = [calendar_ components:units fromDate:nowDate toDate:selfDate options:0];
return cmp.year == 0 && cmp.month == 0 && cmp.day == -1;
}
- (BOOL)isToday
{
formatter_.dateFormat = @"yyyyMMdd";
NSString *selfDay = [formatter_ stringFromDate:self];
NSString *nowDay = [formatter_ stringFromDate:[NSDate date]];
return [selfDay isEqualToString:nowDay];
}
- (BOOL)isTomorrow
{
formatter_.dateFormat = @"yyyyMMdd";
NSString *selfDay = [formatter_ stringFromDate:self];
NSString *nowDay = [formatter_ stringFromDate:[NSDate date]];
NSDate *selfDate = [formatter_ dateFromString:selfDay];
NSDate *nowDate = [formatter_ dateFromString:nowDay];
NSCalendar *calendar_ = [NSCalendar currentCalendar];
NSCalendarUnit units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *cmp = [calendar_ components:units fromDate:nowDate toDate:selfDate options:0];
return cmp.year == 0 && cmp.month == 0 && cmp.day == 1;
}
- (BOOL)isThisYear
{
formatter_.dateFormat = @"yyyy";
NSString *selfYear = [formatter_ stringFromDate:self];
NSString *currentYear = [formatter_ stringFromDate:[NSDate date]];
return [selfYear isEqualToString:currentYear];
}
#pragma mark - 日期时间-字符串 转换
+(NSInteger)timestampFromDateString:(NSString *)timeStr format:(NSString *)format {
NSDate *date = [NSDate dateFromString:timeStr format:format];
return [NSDate cTimestampFromDate:date];
}
+ (NSInteger)cTimestampFromDate:(NSDate *)date {
return (long)[date timeIntervalSince1970];
}
+ (NSString *)stringFromTimestamp:(NSInteger)timeStamp withDateFormat:(NSString *)format {
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeStamp];
return [NSDate stringFromDate:date format:format];
}
+ (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format {
formatter_.dateFormat = format; //指定转date得日期格式化形式
return [formatter_ stringFromDate:date];
}
+ (NSDate *)dateFromString:(NSString *)dateString format:(NSString *)format {
[formatter_ setTimeZone:[NSTimeZone localTimeZone]];
formatter_.dateFormat = format;
return [formatter_ dateFromString:dateString];
}
+ (NSString*)weekdayStringFromDate:(NSDate*)inputDate {
NSArray *weekdays = [NSArray arrayWithObjects: [NSNull null], @"星期天", @"星期一", @"星期二", @"星期三", @"星期四", @"星期五", @"星期六", nil];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
[calendar setTimeZone: timeZone];
NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;
NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:inputDate];
return [weekdays objectAtIndex:theComponents.weekday];
}
@end
2 使用示例
NSInteger timestamp = [NSDate timestampFromDateString:@"2018-12-18 12:00:00" format:@"YYYY-MM-dd HH:mm:ss"];
NSString *datestr = [NSDate stringFromTimestamp:timestamp withDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSString *datestr2 = [NSDate stringFromDate:[NSDate date] format:@"YYYY-MM-dd HH:mm:ss"];
NSDate *date = [NSDate dateFromString:datestr2 format:@"YYYY-MM-dd HH:mm:ss"];
NSString *weekstr = [NSDate weekdayStringFromDate:date];
self.messageLabel.text = [NSString stringWithFormat:@"%ld %@\n%@ %@\n%@", timestamp, datestr, datestr2, date, weekstr];