您的位置:首页 > 移动开发 > Android开发

iOS 和Android中的基本日期处理

2014-02-08 15:42 155 查看
提到日期处理,主要有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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: