shortWeekdaySymbols,NSLocale,NSDateComponents

来源:互联网 发布:php 会员下载系统源码 编辑:程序博客网 时间:2024/06/05 18:46

NSLocale

若你只开发中国区的应用,需要保证用户修改当前语言环境时应用的显示不发生变化。而像NSDateFormatter这样的类,会根据设备的设置,自动返回不同语言的数据。为了保证返回数据的语言一致,我们需要设置NSLocale。

1<!-- lang: cpp -->// 根据本地标识符创建本地化对象
2NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
3NSDateFormatter *secondDateFormatter = [[NSDateFormatter alloc] init];
4[secondDateFormatter setDateFormat:@"cccc"];
5secondDateFormatter.locale = locale;
6NSDate *date = [NSDate date];
7NSLog(@"%@", [secondDateFormatter stringFromDate:date]);

当然,像上面的需求很罕见。

作为大家都不常用的一个类,NSLocale类是将与国家和语言相关的信息进行简单的组合,包括货币,文学方面的信息。 
货币:货币的国际名称(人民币的国际货币名称是CNY);货币符号(人民币的国际货币符号是¥) 
文学:标点符号,文字的书写顺序(左右顺序),引用的起止符号等等 
若做金融一类的应用可能会用到NSLocale这个类。


- (NSString *)sgyoymdForView {

 // _sgyoymd 是NSString的类型

    return [SWKUtilityconvertDateToStringWithName:[SWKUtilityconvertStringToDate:_sgyoymdformat:@"yyyyMMdd"]];

}


+ (NSString *)convertDateToString:(NSDate *)date format:(NSString *)format

{

    NSDateFormatter* formatter = [[NSDateFormatteralloc] init];

    formatter.locale = [[NSLocalealloc] initWithLocaleIdentifier:@"en_US_POSIX"];

    [formatter setDateFormat:format];

    if ([formatlength] == 0)

    {

        [formatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"];

    }

    else

    {

        [formatter setDateFormat:format];

    }


    NSString *strDate = [formatterstringFromDate:date];

    

    return strDate;

}


+ (NSDate *)convertStringToDate:(NSString *)dateString format:(NSString *)format {

    NSDateFormatter* formatter = [[NSDateFormatteralloc] init];

 //根据本地标识符创建本地化对象

    formatter.locale = [[NSLocalealloc] initWithLocaleIdentifier:@"en_US_POSIX"];

    [formatter setDateFormat:format];

    if ([formatlength] == 0)

    {

        [formatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"];

    }

    else

    {

        [formatter setDateFormat:format];

    }

    // 

    return [formatterdateFromString:dateString];

}



+ (NSString *)convertDateToStringWithName:(NSDate *)date

{

    //时间转换成字符串

    NSDateFormatter* formatter = [[NSDateFormatteralloc] init];

    formatter.locale = [[NSLocalealloc] initWithLocaleIdentifier:@"en_US_POSIX"];

    [formatter setDateFormat:@"yyyyMMdd"];

    NSString *strDate = [formatterstringFromDate:date];

    

    NSCalendar* calendar = [NSCalendarcurrentCalendar];

    NSDateComponents* comps = [calendarcomponents:NSCalendarUnitWeekdayfromDate:date];

    formatter.locale = [[NSLocalealloc] initWithLocaleIdentifier:@"zh"];

    //获取当月1号的星期,星期六对应的weekDay是7,shortWeekdaySymbols是显示的一种格式

    NSString *strWeekDay = [NSStringstringWithFormat:@"(%@)", formatter.shortWeekdaySymbols[comps.weekday-1]];


    NSString *ret = [NSStringstringWithFormat:@"%@%@", strDate, strWeekDay];

    

    return ret;

}


日历(NSCalendar)

    //日历    static const NSCalendarUnit CalendarUnitYMD = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;    NSCalendar *calendar = [NSCalendar currentCalendar];    //计算当月第一天    NSDateComponents *component = [calendar components:CalendarUnitYMD fromDate:[NSDate date]];    [component setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];    component.day = 1;    NSDate *currentDateFirstMonthDay = [calendar dateFromComponents:component];    NSLog(@"%@", currentDateFirstMonthDay);    //计算当月最后一天    component.month++;    component.day = 0;    NSLog(@"%@", [calendar dateFromComponents:component]);    //计算相对日期    NSDateComponents *offsetComponent = [[NSDateComponents alloc] init];    offsetComponent.day = 50;    NSLog(@"%@", [calendar dateByAddingComponents:offsetComponent toDate:currentDateFirstMonthDay options:0]);    //日期对应的星期    NSArray *weekDaySymbols = [[[NSDateFormatter alloc] init] shortWeekdaySymbols];    NSDateComponents *dateComponents = [calendar components:NSCalendarUnitWeekday fromDate:currentDateFirstMonthDay];    NSLog(@"%@", weekDaySymbols[dateComponents.weekday - 1]);    //每个月的周数,iOS8以下使用NSWeekCalendarUnit代替NSCalendarUnitWeekOfMonth    NSRange rangeOfweeks = [calendar rangeOfUnit:NSCalendarUnitWeekOfMonth inUnit:NSCalendarUnitMonth forDate:currentDateFirstMonthDay];    NSLog(@"%ld", (long)rangeOfweeks.length);    //计算日期间的天数,通过修改NSCalendarUnit可以间隔的月、年等等    NSLog(@"%ld", (long)[calendar components:NSCalendarUnitDay fromDate:currentDateFirstMonthDay toDate:[NSDate date] options:0].day);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

控制台输出

2016-01-26 23:11:27.038 Test123[6502:707948] 2016-01-01 00:00:00 +00002016-01-26 23:11:27.038 Test123[6502:707948] 2016-01-31 00:00:00 +00002016-01-26 23:11:27.038 Test123[6502:707948] 2016-02-20 00:00:00 +00002016-01-26 23:11:27.039 Test123[6502:707948] 周五2016-01-26 23:11:27.039 Test123[6502:707948] 62016-01-26 23:11:27.040 Test123[6502:707948] 25

0 0
原创粉丝点击