时间转为字符串
NSString *dateStr = [[NSDate date] dateChangeStringWith:@"YYYY-MM-dd HH:mm:ss"];
// 时间: 2019-07-29 10:35:33
字符串转为时间
NSDate *date = [NSDate stringChangeDataWithString:@"2018-03-24 09:30:45" stringType:@"YYYY-MM-dd HH:mm:ss"];
// 时间: 2018-03-24 09:30:45 +0000
时间转为时间戳(单位: 秒)
NSInteger timeInterval = [[NSDate date] dateChangeTimestamp];
// 时间: 1564370267
时间戳转为时间
NSDate *date = [NSDate timestampChangeDateWithTimestamp:1564370267 stringType:@"YYYY-MM-dd HH:mm:ss"];
// 时间: 2019-07-29 11:17:47 +0000
字符串转为时间戳(单位: 秒)
NSInteger timeInterval = [NSDate stringChangeTimestampWithString:@"2018-03-24 09:30:45" stringType:@"YYYY-MM-dd HH:mm:ss"];
// 时间: 1521855045
时间戳转为字符串
NSString *dateStr = [NSDate timestampChangeStringWithTimestamp:1564370267 stringType:@"YYYY-MM-dd HH:mm:ss"];
// 时间: 2019-07-29 11:17:47
时间相比较
NSDate *date = [NSDate stringChangeDataWithString:@"2018-03-29 10:30:45" stringType:@"YYYY-MM-dd HH:mm:ss"];
CompareType type = [[NSDate date] dateCompareWithDate:date];
// CompareTypeBig
时间差值
NSDate *date = [NSDate stringChangeDataWithString:@"2019-07-24 00:00:00" stringType:@"YYYY-MM-dd HH:mm:ss"];
DateDifference *model = [[NSDate date] dateDifferenceWithDate:date];
// 时间: 年: 0 月: 0 日: 5 时: 16 分: 16 秒: 45
时区格式转换成字符串
将
2019-08-26T09:05:54.000Z
格式转为yyyy-MM-dd HH:mm:ss
格式
NSString *dateStr = @"2019-08-26T09:05:54.000Z";
NSDateFormatter * fmt = [[NSDateFormatter alloc] init];
fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
[fmt setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
NSDate * localeDate = [fmt dateFromString:dateStr];
NSTimeZone * zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:localeDate];
NSDate * createDate = [localeDate dateByAddingTimeInterval:interval];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSLog(@"结果: %@", [fmt stringFromDate:createDate]);
// 结果: 结果: 2019-08-26 17:05:54
封装的类扩展
NSDate+extension.h
//
// NSDate+extension.h
// TimeDemo
//
// Created by yfmac001 on 2019/7/29.
// Copyright © 2019 yfmac001. All rights reserved.
// 时间类扩展
/**
时间格式:
G: 公元时代,例如AD公元
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-12,带前置0
MMM: 月,显示为英文月份简写,如 Jan
MMMM: 月,显示为英文月份全称,如 Janualy
dd: 日,2位数表示,如02
d: 日,1-2位显示,如2,无前置0
EEE: 简写星期几,如Sun
EEEE: 全写星期几,如Sunday
aa: 上下午,AM/PM
H: 时,24小时制,0-23
HH: 时,24小时制,带前置0
h: 时,12小时制,无前置0
hh: 时,12小时制,带前置0
m: 分,1-2位
mm: 分,2位,带前置0
s: 秒,1-2位
ss: 秒,2位,带前置0
S: 毫秒
Z: GMT(时区)
*/
#import <Foundation/Foundation.h>
#import "DateDifference.h"
typedef enum : NSInteger {
CompareTypeBig = 0, // 前者大于后者
CompareTypeEqual = 1, // 前者等于后者
CompareTypeSmall = 2, // 前者小于后者
} CompareType;
NS_ASSUME_NONNULL_BEGIN
@interface NSDate (extension)
/**
时间转为字符串
@param stringType 转为字符串的类型
@return 转换后的字符串
*/
- (NSString *)dateChangeStringWith:(NSString *)stringType;
/**
字符串转为时间
@param string 要转化的字符串
@param stringType 转为时间的类型
@return 转换后的时间
*/
+ (instancetype)stringChangeDataWithString:(NSString *)string stringType:(NSString *)stringType;
/**
时间转为时间戳(单位: 秒)
@return 转换后的时间戳(单位: 秒)
*/
- (NSInteger)dateChangeTimestamp;
/**
时间戳转为时间
@param timestamp 要转化的时间戳
@param stringType 转为时间的类型
@return 转换后的时间
*/
+ (instancetype)timestampChangeDateWithTimestamp:(NSInteger)timestamp stringType:(NSString *)stringType;
/**
字符串转为时间戳(单位: 秒)
@param string 要转化的字符串
@param stringType 转为时间的类型
@return 转换后的时间戳(单位: 秒)
*/
+ (NSInteger)stringChangeTimestampWithString:(NSString *)string stringType:(NSString *)stringType;
/**
时间戳转为字符串
@param timestamp 要转化的时间戳
@param stringType 转为时间的类型
@return 转换后的时间
*/
+ (NSString *)timestampChangeStringWithTimestamp:(NSInteger)timestamp stringType:(NSString *)stringType;
/**
时间相比较
@param date 要比较的时间
*/
- (CompareType)dateCompareWithDate:(NSDate *)date;
/**
时间差值
@param date 要比较的时间
*/
- (DateDifference *)dateDifferenceWithDate:(NSDate *)date;
@end
NS_ASSUME_NONNULL_END
NSDate+extension.m
//
// NSDate+extension.m
// TimeDemo
//
// Created by yfmac001 on 2019/7/29.
// Copyright © 2019 yfmac001. All rights reserved.
//
#import "NSDate+extension.h"
@implementation NSDate (extension)
#pragma mark - 时间转为字符串
- (NSString *)dateChangeStringWith:(NSString *)stringType {
if (stringType.length <= 0) { // 没值
NSAssert(NO, @"时间格式不对");
return @"";
}
NSDateFormatter *format = [[NSDateFormatter alloc] init];
// 设置时区
[format setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];
[format setDateFormat:stringType];
return [format stringFromDate:self];
}
#pragma mark - 字符串转为时间
+ (instancetype)stringChangeDataWithString:(NSString *)string stringType:(NSString *)stringType {
if (stringType.length <= 0 || string.length <= 0) { // 没值
NSAssert(NO, @"时间格式不对或者时间不对");
return nil;
}
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];//解决8小时时间差问题
[format setDateFormat:stringType];
return [format dateFromString:string];
}
#pragma mark - 时间转为时间戳(单位: 秒)
- (NSInteger)dateChangeTimestamp {
return (NSInteger)[self timeIntervalSince1970];
}
#pragma mark - 时间戳转为时间
+ (instancetype)timestampChangeDateWithTimestamp:(NSInteger)timestamp stringType:(NSString *)stringType {
if (timestamp < 0 || stringType.length <= 0) { // 没值
NSAssert(NO, @"时间格式不对或者时间戳不对");
return nil;
}
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:stringType];
NSString *dateStr = [format stringFromDate:date];
[format setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];//解决8小时时间差问题
return [format dateFromString:dateStr];
}
#pragma mark - 字符串转为时间戳(单位: 秒)
+ (NSInteger)stringChangeTimestampWithString:(NSString *)string stringType:(NSString *)stringType {
if (stringType.length <= 0 || string.length <= 0) { // 没值
NSAssert(NO, @"时间格式不对或者时间不对");
return 0;
}
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:stringType];
NSDate *date = [format dateFromString:string];
return (NSInteger)[date timeIntervalSince1970];
}
#pragma mark - 时间戳转为字符串
+ (NSString *)timestampChangeStringWithTimestamp:(NSInteger)timestamp stringType:(NSString *)stringType {
if (timestamp < 0 || stringType.length <= 0) { // 没值
NSAssert(NO, @"时间格式不对或者时间戳不对");
return nil;
}
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:stringType];
NSString *dateStr = [format stringFromDate:date];
return dateStr;
}
#pragma mark - 时间相比较
- (CompareType)dateCompareWithDate:(NSDate *)date {
NSComparisonResult result = [self compare:date];
if (result == NSOrderedAscending) { // 前者小于后者
return CompareTypeSmall;
}else if (result == NSOrderedSame) { // 前者等于后者
return CompareTypeEqual;
}else { // 前者大于后者
return CompareTypeBig;
}
}
#pragma mark - 时间差值
- (DateDifference *)dateDifferenceWithDate:(NSDate *)date {
// 2.创建日历
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8];
NSCalendarUnit type = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *cmps = [calendar components:type fromDate:date toDate:[self dateByAddingTimeInterval:8 * 60 * 60] options:0];
DateDifference *difference = [[DateDifference alloc] init];
difference.year = cmps.year;
difference.month = cmps.month;
difference.day = cmps.day;
difference.hour = cmps.hour;
difference.minute = cmps.minute;
difference.second = cmps.second;
return difference;
}
@end
DateDifference.h
//
// DateDifference.h
// TimeDemo
//
// Created by yfmac001 on 2019/7/29.
// Copyright © 2019 yfmac001. All rights reserved.
// 时间差 模型
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface DateDifference : NSObject
/** 年 */
@property (nonatomic, assign) NSInteger year;
/** 月 */
@property (nonatomic, assign) NSInteger month;
/** 日 */
@property (nonatomic, assign) NSInteger day;
/** 时 */
@property (nonatomic, assign) NSInteger hour;
/** 分 */
@property (nonatomic, assign) NSInteger minute;
/** 秒 */
@property (nonatomic, assign) NSInteger second;
@end
NS_ASSUME_NONNULL_END
DateDifference.m
//
// DateDifference.m
// TimeDemo
//
// Created by yfmac001 on 2019/7/29.
// Copyright © 2019 yfmac001. All rights reserved.
//
#import "DateDifference.h"
@implementation DateDifference
@end
网友评论