关于给个既定日期改成星期几的问题?

本来写了一个方法可以得到123这样的数代表周几代码如下

////根据日期获得当时星期几

//-(NSString *)getWeekDay:(NSArray *)array

//{

//    NSMutableArray *weekArray=[NSMutableArray arrayWithObjects:@"",@"",@"",@"",@"", nil];

//    NSDateComponents *comps = [[NSDateComponents alloc] init];

//    [comps setYear:[array[0] integerValue]];

//    [comps setMonth:[array[1] integerValue]];

//    [comps setDay:[array[2] integerValue]];

//    NSCalendar *gregorian = [[NSCalendar alloc]

//                            initWithCalendarIdentifier:NSGregorianCalendar];

//    NSDate *date = [gregorian dateFromComponents:comps];

//    NSDateComponents *weekdayComponents =

//    [gregorian components:NSWeekdayCalendarUnit fromDate:date];

//    NSInteger weekday = [weekdayComponents weekday];

//

//    return weekArray[weekday-2];

//}


后来被项目经理鄙视了然后就去查方法最后各种转格式都无济于事上最终代码

_dateArray[section]代表2012-12-10这种格式的字符串

NSDateFormatter *dateFormatter=[[NSDateFormatteralloc]init];

    [dateFormattersetDateFormat:@"yyyy-MM-dd"];

   NSDate *date=[dateFormatterdateFromString:_dateArray[section]];

    [dateFormattersetDateFormat:@"yyyy-MM-dd    EEEE"];

    [dateFormatter setLocale:[[NSLocalealloc]initWithLocaleIdentifier:@"zh_CN"]];

    

   NSString *locationString=[dateFormatterstringFromDate:date];

    

    //拼接获得的星期几

    titleLabel.text =locationString;

虽然转成功了但是也让别人鄙视了又查了好多格式化补充能量

 NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];

    [dateFormatter setTimeZone:timeZone];//获得当前时区好像是东八区


复制过来的这也是个很神奇的东西好像能以各种格式输出可以查看他的APINSNumberFormatterDecimalStyle

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

        formatter.numberStyle = NSNumberFormatterDecimalStyle;

        NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:123456789]];

        NSLog(@"Formatted number string:%@",string);

NSNumberFormatterDecimalStyle 123,456,789

kCFNumberFormatterCurrencyStyle $123,456,789.00货币计数

下面都是12345打出来的数据

kCFNumberFormatterPercentStyle 1,234,500%数据不对没那么大的百分数吗

kCFNumberFormatterScientificStyle 1.2345E4科学计数法

kCFNumberFormatterSpellOutStyle twelve thousand three hundred forty-five 英语计数



各种格式转化以后用的着收藏了

 [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

设置倒角

//    self.shuHuiLabel.layer.masksToBounds = YES;

//    self.shenGouLabel.layer.masksToBounds = YES;

//    self.shenGouLabel.layer.cornerRadius = 10;

//    self.shuHuiLabel.layer.cornerRadius = 10;

获取的时间的时区是0时区,需要转换成所在的时区,中国一般是在8时区,所以获取的时间会比实际少8小时,解决方法如下:

  1. NSDate *date = [NSDate date];  
  2. NSTimeZone *zone = [NSTimeZone systemTimeZone];  
  3. NSInteger interval = [zone secondsFromGMTForDate: date];  
  4. NSDate *localeDate = [date  dateByAddingTimeInterval: interval];  
  5. NSLog(@"enddate=%@",localeDate);  

//科学计算法精确值根据给的数确定

 NSDecimalNumber *number = [NSDecimalNumberdecimalNumberWithMantissa:12345

                               

                                                               exponent:-3

                               

                                                             isNegative:NO];

   NSLog(@"%@",number);

    

    NSDecimalNumber *subtotal = [NSDecimalNumberdecimalNumberWithString:@"11290.211"];

    

    NSDecimalNumber *discount = [NSDecimalNumberdecimalNumberWithString:@"0.22"];

    

    

    

    NSDecimalNumber *total = [subtotaldecimalNumberByAdding:discount];

    NSDecimalNumber *total1 = [subtotaldecimalNumberBySubtracting:discount];


    NSLog(@"Rounded total: %@======%@", total,total1);

    NSString *str = [NSStringstringWithFormat:@"%@",total];

   NSLog(@"%@",str);

    

    NSNumberFormatter *formatter = [[NSNumberFormatteralloc] init];

    

    

    formatter.numberStyle =kCFNumberFormatterDecimalStyle;

    

   NSString *str1 = @"12344.54";

   int inter = [str1 intValue];

    

   NSString *string = [formatter stringFromNumber:subtotal];

    

    

    NSLog(@"Formatted number string:%d%@",inter,string);

    

在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。

例如:如何将格式为“12-May-14 05.08.02.000000 PM”的时间转化成“2014/05/12 5:08:02”,下面是具体实现代码:

    NSString* timeStr = @"12-May-14 05.08.02.000000 PM";

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    [formatter setDateStyle:NSDateFormatterMediumStyle];

    [formatter setTimeStyle:NSDateFormatterShortStyle];

    [formatter setDateFormat:@"dd-MMMM-yy hh.mm.ss.ssssss aa"];//设置源时间字符串的格式

    NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];//设置时区

    [formatter setTimeZone:timeZone];

    NSDate* date = [formatter dateFromString:timeStr];//将源时间字符串转化为NSDate

    NSDateFormatter* toformatter = [[NSDateFormatter alloc] init];

    [toformatter setDateStyle:NSDateFormatterMediumStyle];

    [toformatter setTimeStyle:NSDateFormatterShortStyle];

    [toformatter setDateFormat:@"yyyy/MM/dd h:MM:ss"];//设置目标时间字符串的格式

    NSString *targetTime = [toformatter stringFromDate:date];//将时间转化成目标时间字符串

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

    

其实时间格式之间的相互转化完全依赖于NSDateFormatter。

NSDateFormatter有下面2个方法:
  - (NSString *)stringFromDate:(NSDate *)date;//NSDate转NSString
  - (NSDate *)dateFromString:(NSString *)string;//NSString转NSDate
 

字符说明

(:)

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

(/)

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

(%)

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

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)


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的相关用法

 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];




发布了5 篇原创文章 · 获赞 0 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章