日期类问题与解决方法小结
2016-02-19 09:28
225 查看
********************
日期类
@interface NSDate : NSObject <</SPAN>NSCopying, NSSecureCoding>
这个类比较简单 就几个方法 都是跟NSTimeInterval(时间间隔)有关 其实就是double值
********
获取的NSDate date时间与实际相差8个小时解决方案
NSDate *cur = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: cur];
cur = [cur dateByAddingTimeInterval: interval];
NSLog(@"当前时间:%@", cur);
我习惯的写法:
NSDate *cur = [NSDate date];
cur = [cur dateByAddingTimeInterval: [[NSTimeZone systemTimeZone] secondsFromGMTForDate:cur]];
NSLog(@"当前时间:%@", cur);
********
日期格式化类
@interface NSDateFormatter : NSFormatter
这个类提供一些date与string之间的格式化的工具方法
- (NSString *)stringFromDate:(NSDate *)date;
- (NSDate *)dateFromString:(NSString *)string;
时间与string的转换
如果用df的话 就不用考虑格林尼治时间差
- (NSString *)dateFormat;
时间格式 一定要设置
@"yyyy-MM-dd HH:mm:ss.s"
2014-07-03 03:14:04.3
注意:
①第一个mm要大写
②hh如果是大写就是24进制 小写就是12进制
③ss后面加.显示毫秒
④还有带am pm 的以后用到补充 a 是上午下午
@"EE MMM dd HH:mm:ss Z yyyy"
Wed Jul 02 20:14:04 -0700 2014
G -- 纪元
一般会显示公元前(BC)和公元(AD)
y -- 年
假如是2013年,那么yyyy=2013,yy=13
M -- 月
假如是3月,那么M=3,MM=03,MMM=Mar,MMMM=March
假如是11月,那么M=11,MM=11,MMM=Nov,MMMM=November
w -- 年包含的周
假如是1月8日,那么w=2(这一年的第二个周)
W -- 月份包含的周(与日历排列有关)
假如是2013年4月21日,那么W=4(这个月的第四个周)
F -- 月份包含的周(与日历排列无关)
和上面的W不一样,F只是单纯以7天为一个单位来统计周,例如7号一定是第一个周,15号一定是第三个周,与日历排列无关。
D -- 年包含的天数
假如是1月20日,那么D=20(这一年的第20天)
假如是2月25日,那么D=31+25=56(这一年的第56天)
d -- 月份包含的天数
假如是5号,那么d=5,dd=05
假如是15号,那么d=15,dd=15
E -- 星期
假如是星期五,那么E=Fri,EEEE=Friday
a -- 上午(AM)/下午(PM)
H -- 24小时制,显示为0--23
假如是午夜00:40,那么H=0:40,HH=00:40
h -- 12小时制,显示为1--12
假如是午夜00:40,那么h=12:40
K -- 12小时制,显示为0--11
假如是午夜00:40,那么K=0:40,KK=00:40
k -- 24小时制,显示为1--24
假如是午夜00:40,那么k=24:40
m -- 分钟
假如是5分钟,那么m=5,mm=05
假如是45分钟,那么m=45,mm=45
s -- 秒
假如是5秒钟,那么s=5,ss=05
假如是45秒钟,那么s=45,ss=45
S -- 毫秒
一般用SSS来显示
z -- 时区
表现形式为GMT+08:00
Z -- 时区
表现形式为+0800
http://www.cnblogs.com/wayne23/archive/2013/03/25/2981009.html
_l_date1.text = [df stringFromDate:d];
[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]];
设置中文显示格式(星期X)
@"yyyy年MM月dd日#EEEE"
EEEE为星期几,EEE为周几, EE是英文缩写
@"yyyy年MMMMd日"];//MMMM 为xx月,一个d可以省去01日前的0
typedef enum {
NSDateFormatterNoStyle = kCFDateFormatterNoStyle,
NSDateFormatterShortStyle = kCFDateFormatterShortStyle,//“11/23/37” or “3:30pm”
NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,//"Nov 23, 1937"
NSDateFormatterLongStyle = kCFDateFormatterLongStyle,//"November 23, 1937” or “3:30:32pm"
NSDateFormatterFullStyle = kCFDateFormatterFullStyle//“Tuesday, April 12, 1952 AD” or “3:30:42pm PST”
} NSDateFormatterStyle;
日期类
@interface NSDate : NSObject <</SPAN>NSCopying, NSSecureCoding>
这个类比较简单 就几个方法 都是跟NSTimeInterval(时间间隔)有关 其实就是double值
********
获取的NSDate date时间与实际相差8个小时解决方案
NSDate *cur = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: cur];
cur = [cur dateByAddingTimeInterval: interval];
NSLog(@"当前时间:%@", cur);
我习惯的写法:
NSDate *cur = [NSDate date];
cur = [cur dateByAddingTimeInterval: [[NSTimeZone systemTimeZone] secondsFromGMTForDate:cur]];
NSLog(@"当前时间:%@", cur);
********
日期格式化类
@interface NSDateFormatter : NSFormatter
这个类提供一些date与string之间的格式化的工具方法
- (NSString *)stringFromDate:(NSDate *)date;
- (NSDate *)dateFromString:(NSString *)string;
时间与string的转换
如果用df的话 就不用考虑格林尼治时间差
- (NSString *)dateFormat;
时间格式 一定要设置
@"yyyy-MM-dd HH:mm:ss.s"
2014-07-03 03:14:04.3
注意:
①第一个mm要大写
②hh如果是大写就是24进制 小写就是12进制
③ss后面加.显示毫秒
④还有带am pm 的以后用到补充 a 是上午下午
@"EE MMM dd HH:mm:ss Z yyyy"
Wed Jul 02 20:14:04 -0700 2014
G -- 纪元
一般会显示公元前(BC)和公元(AD)
y -- 年
假如是2013年,那么yyyy=2013,yy=13
M -- 月
假如是3月,那么M=3,MM=03,MMM=Mar,MMMM=March
假如是11月,那么M=11,MM=11,MMM=Nov,MMMM=November
w -- 年包含的周
假如是1月8日,那么w=2(这一年的第二个周)
W -- 月份包含的周(与日历排列有关)
假如是2013年4月21日,那么W=4(这个月的第四个周)
F -- 月份包含的周(与日历排列无关)
和上面的W不一样,F只是单纯以7天为一个单位来统计周,例如7号一定是第一个周,15号一定是第三个周,与日历排列无关。
D -- 年包含的天数
假如是1月20日,那么D=20(这一年的第20天)
假如是2月25日,那么D=31+25=56(这一年的第56天)
d -- 月份包含的天数
假如是5号,那么d=5,dd=05
假如是15号,那么d=15,dd=15
E -- 星期
假如是星期五,那么E=Fri,EEEE=Friday
a -- 上午(AM)/下午(PM)
H -- 24小时制,显示为0--23
假如是午夜00:40,那么H=0:40,HH=00:40
h -- 12小时制,显示为1--12
假如是午夜00:40,那么h=12:40
K -- 12小时制,显示为0--11
假如是午夜00:40,那么K=0:40,KK=00:40
k -- 24小时制,显示为1--24
假如是午夜00:40,那么k=24:40
m -- 分钟
假如是5分钟,那么m=5,mm=05
假如是45分钟,那么m=45,mm=45
s -- 秒
假如是5秒钟,那么s=5,ss=05
假如是45秒钟,那么s=45,ss=45
S -- 毫秒
一般用SSS来显示
z -- 时区
表现形式为GMT+08:00
Z -- 时区
表现形式为+0800
http://www.cnblogs.com/wayne23/archive/2013/03/25/2981009.html
_l_date1.text = [df stringFromDate:d];
[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]];
设置中文显示格式(星期X)
@"yyyy年MM月dd日#EEEE"
EEEE为星期几,EEE为周几, EE是英文缩写
@"yyyy年MMMMd日"];//MMMM 为xx月,一个d可以省去01日前的0
typedef enum {
NSDateFormatterNoStyle = kCFDateFormatterNoStyle,
NSDateFormatterShortStyle = kCFDateFormatterShortStyle,//“11/23/37” or “3:30pm”
NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,//"Nov 23, 1937"
NSDateFormatterLongStyle = kCFDateFormatterLongStyle,//"November 23, 1937” or “3:30:32pm"
NSDateFormatterFullStyle = kCFDateFormatterFullStyle//“Tuesday, April 12, 1952 AD” or “3:30:42pm PST”
} NSDateFormatterStyle;