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

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

iOS

1. NSDateFormatter类

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

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:];
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: locale:usLocale];
NSLog(@"usFormatterString: %@", usFormatString);
// Output: usFormatterString: EEE, MMM d.
NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
NSString *gbFormatString = [NSDateFormatter dateFormatFromTemplate:@"EdMMM" options: 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:];
/*
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;

iOS 和Android中的基本日期处理的更多相关文章

  1. iOS 和Android中的正则表达式简单使用

    ios 中需要使用NSRegularExpression类,NSTextCheckingResult类. 下面给出最基本的实现代码 NSRegularExpression *regex = [NSRe ...

  2. iOS 和 Android 中的Alert

    iOS 和 Android中都有alert这种提示框,下面简单介绍下. ios中的alert叫做UIAlertView,共有4种样式,由于在ios7上,自定义alertview不太好用,所以也就这4种 ...

  3. iOS 和 Android 中的后台运行问题

    后台机制的不同,算是iOS 和 Android的一大区别了,最近发布的iOS7又对后台处理做了一定的更改,找时间总结一下编码上的区别,先做个记录. 先看看iOS的把,首先需要仔细阅读一下Apple的官 ...

  4. Android中的时间日期选择器

    1.layout <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...

  5. iOS实现Android中Gone的功能

    实现隐藏view但不占位置的需求是很常见的(Android里的view.GONE),可iOS里并没有这玩意,只有hidden.于是自己写了一个一般情况下用的category,特殊情况就得看情况做了.其 ...

  6. 【动画消消乐 】仿ios、android中常见的一个loading动画 074

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

  7. Android中仿IOS提示框的实现

    前言 在Android开发中,我们有时需要实现类似IOS的对话框.今天我就来总结下,如何通过自定义的开发来实现类似的功能. 自定义Dialog 我们知道Android中最常用的对话框就是Dialog及 ...

  8. Ionic中使用Chart.js进行图表展示以及在iOS/Android中的性能差异

    Angular Chart 简介 在之前的文章中介绍了使用 Ionic 开发跨平台(iOS & Android)应用中遇到的一些问题的解决方案. 在更新0.1.3版本的过程中遇到了需要使用图表 ...

  9. iOS中的NSTimer 和 Android 中的Timer

    首先看iOS的, Scheduling Timers in Run Loops A timer object can be registered in only one run loop at a t ...

随机推荐

  1. 关于obj和基本类通过函数参数传进去执行是否改变原来的值

    var obj = { p1 : 1, p2 : 2 }; (function(_/* 这个东东是地址的应用哦 */){ _.p1 = 3, _.p2 = 4 })(obj) var i = 2; ( ...

  2. 【HDU 4602】Partition

    题意 给你一个数n,把它写成几个正整数相加的形式,即把n拆开成若干段,把所有可能的式子里正整数 k 出现的次数取模是多少. 分析 特判 k>=n 的情况. k<n时:问题相当于n个点排一行 ...

  3. 洛谷P1417 烹调方案

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  4. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  5. Erlang之父的学习历史及学习建议

    当我开始学习编程的时候(1967年),我可以在 FORTRAN 和(传说中的)Algol 之间选择,不过没有任何人了解 Algol,所以我选择了 FORTRAN. 在我最早学习编程的时候,我的编程周期 ...

  6. 统计网站访问量,以GD2库图像形式输出

    index.php页面<?php session_start(); if($_SESSION[temp]==""){ //判断$_SESSION[temp]=="& ...

  7. linux建立用户 详细

    .你同时属于两个或两个以上的组. 两个条件你至少具备一个,你才能够把文件所属旧组变为新组.使用如下的命令将当前目录下所有html文件所属的组改为httpd: chgrp httpd *.html 和c ...

  8. Web Service 元数据注释(JSR 181)

    Web Service 元数据注释(JSR 181) @WebService 1.serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service.缺省值 ...

  9. swift中文文档翻译之--字符串和字符

    字符串和字符 A string is an ordered collection of characters, such as "hello, world" or "al ...

  10. 关闭 ubuntu System program problem detected

    每次开机都出现: System program problem detected 很麻烦,关闭方法: vim /etc/default/apport # set this to 0 to disabl ...