zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    struts2学习笔记一struts2标签学习
    Struts2常用标签总结
    Strtus2标签<s:url>
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@d3ade7 ,项目启动错误
    【异常处理】com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@390508 --&nb
    MyEclipse怎么导入导出项目
    struts2的s:iterator 标签 详解
    CSS中的Position属性
    用Iterator实现遍历集合
    ArrayList的toArray
  • 原文地址:https://www.cnblogs.com/breezemist/p/3540232.html
Copyright © 2011-2022 走看看