NSString和NSDate的相互转化

ios开发入门 专栏收录该内容
128 篇文章 0 订阅

NSDate 转换为 NSString:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *strDate = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"%@", strDate);

NSString 转换为 NSDate:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [dateFormatter dateFromString:@"2015-06-15 16:01:03"];
NSLog(@"%@", date);

但是特别注意的是: NSString 转换为 NSDate时,设定的时间格式@”yyyy-MM-dd HH:mm:ss”一定要与字符:@”2015-06-15 16:01:03”串相对应,否则会无效。
比如在一次做项目时,从服务器请求的时间为”2015-06-16 16:44:59.0”,
那么在转化为NSDate时,类型应为:@”yyyy-MM-dd HH:mm:ss.0”,否则将无效(刚开始时没加.0,所以一直无法得到想要显示的时间)
从服务器得到的时间,比如为:”2015-06-16 16:44:59.0”,想显示为06-16 16:44 ,则应先将字符创类型转为NSDate类型,但是类型必须对应好,再根据想要的格式,转为字符串类型。
例如:

NSString *str =[NSString stringWithFormat:@"%@",[param objectForKey:@"createDateTime"]];//获取到服务器请求到的时间并转化为字符串

    //实例化一个NSDateFormatter对象
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.0"];//注意因为服务器请求到得时间类型为:"2015-06-16 16:44:59.0",所以,此处设置必须与之对应:@"yyyy-MM-dd HH:mm:ss.0"
    NSDate *date = [dateFormatter dateFromString:str];



    NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
    [dateFormatter2 setDateFormat:@"MM-dd HH:mm"];//根据想要得到的格式进行转化
    NSString *strDate = [dateFormatter2 stringFromDate:date];
    self.dateLabel.text = strDate;

对于请求到的时间是这种时:1444665600000,是毫秒的形式,要除以1000才行,转化为秒

 double lastactivityInterval = [[value objectForKey:@"time"]  doubleValue]/1000;

    if (lastactivityInterval !=0) {
        NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
        [formatter setDateStyle:NSDateFormatterMediumStyle];
        [formatter setTimeStyle:NSDateFormatterShortStyle];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSDate* date = [NSDate dateWithTimeIntervalSince1970:lastactivityInterval];

        NSString* dateString = [formatter stringFromDate:date];

        [muDic setObject:dateString forKey:@"createDate"];

    }

字符说明
(:)

时间分隔符。在某些区域设置中,可以使用其他字符表示时间分隔符。时间分隔符在格式化时间值时分隔小时、分钟和秒。格式化输出中用作时间分隔符的实际字符由您的应用程序的当前区域性值确定。

(/)

日期分隔符。在某些区域设置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值时分隔日、月和年。格式化输出中用作日期分隔符的实际字符由您的应用程序的当前区域性确定。

(%)

用于表明不论尾随什么字母,随后字符都应该以单字母格式读取。也用于表明单字母格式应以用户定义格式读取。有关更多详细信息,请参见下面的内容。

d

将日显示为不带前导零的数字(如 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %d。

dd

将日显示为带前导零的数字(如 01)。

EEE

将日显示为缩写形式(例如 Sun)。

EEEE

将日显示为全名(例如 Sunday)。

M

将月份显示为不带前导零的数字(如一月表示为 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %M。

MM

将月份显示为带前导零的数字(例如 01/12/01)。

MMM

将月份显示为缩写形式(例如 Jan)。

MMMM

将月份显示为完整月份名(例如 January)。

gg

显示时代/纪元字符串(例如 A.D.)

h

使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)。如果这是用户定义的数字格式中的唯一字符,请使用 %h。

hh

使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)。

H

使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %H。

HH

使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)。

m

将分钟显示为不带前导零的数字(例如 12:1:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %m。

mm

将分钟显示为带前导零的数字(例如 12:01:15)。

s

将秒显示为不带前导零的数字(例如 12:15:5)。如果这是用户定义的数字格式中的唯一字符,请使用 %s。

ss

将秒显示为带前导零的数字(例如 12:15:05)。

f

显示秒的小数部分。例如,ff 将精确显示到百分之一秒,而 ffff 将精确显示到万分之一秒。用户定义格式中最多可使用七个 f 符号。如果这是用户定义的数字格式中的唯一字符,请使用 %f。

t

使用 12 小时制,并对中午之前的任一小时显示大写的 A,对中午到 11:59 P.M 之间的任一小时显示大写的 P。如果这是用户定义的数字格式中的唯一字符,请使用 %t。

tt

对于使用 12 小时制的区域设置,对中午之前任一小时显示大写的 AM,对中午到 11:59 P.M 之间的任一小时显示大写的 PM。

对于使用 24 小时制的区域设置,不显示任何字符。

y

将年份 (0-9) 显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符,请使用 %y。

yy

以带前导零的两位数字格式显示年份(如果适用)。

yyy

以四位数字格式显示年份。

yyyy

以四位数字格式显示年份。

z

显示不带前导零的时区偏移量(如 -8)。如果这是用户定义的数字格式中的唯一字符,请使用 %z。

zz

显示带前导零的时区偏移量(例如 -08)

zzz

显示完整的时区偏移量(例如 -08:00)

格式显示
M/d/yy

12/7/58

d-MMM

7-Dec

d-MMMM-yy

7-December-58

d MMMM

7 December

MMMM yy

December 58

hh:mm tt

08:50 PM

h:mm:ss t

8:50:35 P

H:mm

20:50

H:mm:ss

20:50:35

M/d/yyyy H:mm

12/7/1958 20:50

IOS NSDate日期操作总结

1 // 当前时间创建NSDate

    NSDate *myDate = [NSDate date];

    NSLog(@"myDate = %@",myDate);

2 //从现在开始的24小时

    NSTimeInterval secondsPerDay = 24*60*60;

    NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];

    NSLog(@"myDate = %@",tomorrow);

3//根据已有日期创建日期

     NSTimeInterval secondsPerDay1 = 24*60*60;

    NSDate *now = [NSDate date];

    NSDate *yesterDay = [now addTimeInterval:-secondsPerDay1];

    NSLog(@"yesterDay = %@",yesterDay);

4//比较日期

    BOOL sameDate = [now isEqualToDate:yesterDay];

    NSLog(@"sameDate = %lu",sameDate);

    4.1//获取较早的日期

    NSDate *earlierDate = [yesterDay earlierDate:now];

    NSLog(@"earlierDate  = %@",earlierDate);

    4.2//较晚的日期

    NSDate *laterDate = [yesterDay laterDate:now];

    NSLog(@"laterDate  = %@",laterDate);



    //两个日期之间相隔多少秒

    NSTimeInterval secondsBetweenDates= [yesterDay timeIntervalSinceDate:now];

    NSLog(@"secondsBetweenDates=  %lf",secondsBetweenDates);

    //通过NSCALENDAR类来创建日期

    NSDateComponents *comp = [[NSDateComponentsalloc]init];

    [comp setMonth:06];

    [comp setDay:01];

    [comp setYear:2001];

    NSCalendar *myCal = [[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];

    NSDate *myDate1 = [myCal dateFromComponents:comp];

    NSLog(@"myDate1 = %@",myDate1);



    //从已有日期获取日期

    unsigned units  = NSMonthCalendarUnit|NSDayCalendarUnit|NSYearCalendarUnit;

    NSDateComponents *comp1 = [myCal components:units fromDate:now];

    NSInteger month = [comp1 month];

    NSInteger year = [comp1 year];

    NSInteger day = [comp1 day];

    //NSDateFormatter实现日期的输出

    NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

    [formatter setDateStyle:NSDateFormatterFullStyle];//直接输出的话是机器码

    //或者是手动设置样式[formatter setDateFormat:@"yyyy-mm-dd"];

    NSString *string = [formatter stringFromDate:now];

    NSLog(@"string = %@",string);

    NSLog(@"formater = %@",formatter);

//获取日期格式对象

  • (NSDateFormatter *)dateFormatter {

if (dateFormatter == nil) {

dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

}

return dateFormatter;

}

NSDate与NSDateFormatter的相关用法

1.NSDateFormatter配合NSDate与NSString之间的转化
NSDateFormatter有下面2个方法:
- (NSString )stringFromDate:(NSDate )date;//NSDate转NSString
- (NSDate )dateFromString:(NSString )string;//NSString转NSDate

e.g.
NSString *dateString=@”1900-01-01”;
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@”yyyy-MM-dd”];
NSDate *date=[dateFormatter dateFromString:dateString];
[dateFormatter release];

NSString转NSDate与上面类似
NSString *dateString=[dateFormatter dateFromString:[NSDate date]];

2.NSDateFormatter 的一些格式介绍
[dateFormatter setDateFormat:@”yyyy年MM月dd日#EEEE”];EEEE为星期几,EEE为周几
[dateFormatter setDateFormat:@”yyyy-MM-dd HH:mm:ss”];
[dateFormatter setDateFormat:@”yyyy年MMMMd日”];//MMMM 为xx月,一个d可以省去01日前的0

3.NSString转NSDate少一天的解决办法
用下面这种格式化方式
1.[dateFormatter setDateFormat:@”yyyy-MM-dd HH:mm:ss”];

2.
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
NSDate *todayDate = [calendar dateFromComponents:components];

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值