iOS 和Android中的基本日期处理

提到日期处理,主要有2个参数,一个是所在的时区,一个是所用的日历方法。

主要涉及2大类问题,一类是日期类型和字符串之间的转化,另一类是日期的计算问题。ios和android都提供了相应的类来处理问题。

iOS

1. NSDateFormatter类

它的作用是进行NSDate 和字符串之间的相互转化。除了自定义格式外,它还提供了集中默认格式常量,例如

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:162000];
NSString *formattedDateString = [dateFormatter stringFromDate:date];
NSLog(@"formattedDateString: %@", formattedDateString);
// Output for locale en_US: "formattedDateString: Jan 2, 2001".

可以注意到,date的格式和time的格式是分开处理的。

除了几种默认样式,ios还提供了+ (NSString *)dateFormatFromTemplate:(NSString *)template options:(NSUInteger)opts locale:(NSLocale *)locale

方法,使用这个方法可以产生一个format字符串,这个字符串是系统根据你要显示的内容和地方自动产生的,比自己写的更加准确(因为你可能不知道那个地方的准确日期格式),比如

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSString *usFormatString = [NSDateFormatter dateFormatFromTemplate:@"EdMMM" options:0 locale:usLocale];
NSLog(@"usFormatterString: %@", usFormatString);
// Output: usFormatterString: EEE, MMM d.
NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
NSString *gbFormatString = [NSDateFormatter dateFormatFromTemplate:@"EdMMM" options:0 locale:gbLocale];
NSLog(@"gbFormatterString: %@", gbFormatString);
// Output: gbFormatterString: EEE d MMM.

 

2. NSCalendar类

它的作用是日期计算。

---------------------------

下面的例子可以看到这两个类的基本应用

- (NSString *)getAgeFromBirthday:(NSString *)birthday
{
    NSDateFormatter *formatter    =  [[NSDateFormatter alloc] init];
    
    NSLocale *formatLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
    [formatter setLocale:formatLocale];
    
    NSString *formatString = @"dd/MM/yyyy";
    [formatter setDateFormat:formatString];
    
   // [formatter setTimeZone:tzTimeZone];
    NSLog(@"time zone is %@",formatter.timeZone);
   // formatter.timeZone
    
    NSDate *birthdayDate = [formatter dateFromString:birthday];

    NSDate * newDate =[NSDate new];
    
    
    NSCalendar* chineseClendar = [ [ NSCalendar alloc ] initWithCalendarIdentifier:NSGregorianCalendar];
    
    NSUInteger unitFlags =    NSHourCalendarUnit | NSMinuteCalendarUnit |
    
    NSSecondCalendarUnit | NSDayCalendarUnit
    
    | NSMonthCalendarUnit | NSYearCalendarUnit;
    
    NSDateComponents *cps = [chineseClendar components:unitFlags fromDate:birthdayDate  toDate:newDate  options:0];
    /*
    NSInteger diffHour = [ cps hour ];
    
    NSInteger diffMin    = [ cps minute ];
    
    NSInteger diffSec   = [ cps second ];
    
    NSInteger diffDay   = [ cps day ];
    
    NSInteger diffMon  = [ cps month ];
      */
    NSInteger diffYear = [ cps year ];
  
    NSString *returnStr = [NSString stringWithFormat:@"%d Years",diffYear];
    
    return returnStr;
}

 

 2 Android

Android 中常使用SimpleDateFormat,注意这里的locale参数,它和ios里的意义一致,当locale是中国时,日期字符串中会出现 “年,月,日”等中国汉字!ios是否会这样还没有验证。

 

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
 Date selectDate = null;
        try {
            selectDate = format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }

 

Calendar 的基本使用方法如下:

   Calendar selectCalendar = Calendar.getInstance();
   selectCalendar.setTime(selectDate);

   Calendar nowEndCalendar = Calendar.getInstance();
   nowEndCalendar.setTime(new Date());
   nowEndCalendar.set(Calendar.HOUR_OF_DAY, 23);
   nowEndCalendar.set(Calendar.MINUTE, 59);
   nowEndCalendar.set(Calendar.SECOND, 59);

   if (selectCalendar.compareTo(nowEndCalendar) > 0)
          return true;

 

 

 

posted @ 2014-02-08 15:42  幻化成疯  阅读(1037)  评论(0编辑  收藏  举报