NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间

Dates

NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能。Date对象是不可改变的。

如果你要创建date对象并表示当前日期,你可以alloc一个NSDate对象并调用init初始化:

C代码

NSDate *now = [[NSDate alloc] init];

或者使用NSDate的date类方法来创建一个日期对象。如果你需要与当前日期不同的日期,你可以使用NSDate的
initWithTimeInterval...或dateWithTimeInterval...方法,你也可以使用更复杂的calendar或
date components对象。

创建一定时间间隔的NSDate对象:

C代码

NSTimeInterval secondsPerDay = 24 * 60 * 60;

//明天时间
NSDate *tomorrow = [[NSDate alloc] initWithTimeIntervalSinceNow:secondsPerDay];

//昨天时间
NSDate *yesterday = [[NSDate alloc] initWithTimeIntervalSinceNow:-secondsPerDay];

[tomorrow release];

[yesterday release];

使用增加时间间隔的方式来生成NSDate对象:

C代码

NSTimeInterval secondsPerDay = 24 * 60 * 60;

NSDate *today = [[NSDate alloc] init];

NSDate *tomorrow, *yesterday;

tomorrow = [today dateByAddingTimeInterval: secondsPerDay];

yesterday = [today dateByAddingTimeInterval: -secondsPerDay];

[today release];

如果要对NSDate对象进行比较,可以使用isEqualToDate:, compare:, laterDate:和
earlierDate:方法。这些方法都进行精确比较,也就是说这些方法会一直精确比较到NSDate对象中秒一级。例如,你可能比较两个日期,如果他
们之间的间隔在一分钟之内则认为这两个日期是相等的。在这种情况下使用,timeIntervalSinceDate:方法来对两个日期进行比较。下面的
代码进行了示例:

C代码

if (fabs([date2 timeIntervalSinceDate:date1]) < 60) ...

NSCalendar & NSDateComponents

日历对象封装了对系统日期的计算,包括这一年开始,总天数以及划分。你将使用日历对象对绝对日期与date components(包括年,月,日,时,分,秒)进行转换。

NSCalendar定义了不同的日历,包括佛教历,格里高利历等(这些都与系统提供的本地化设置相关)。NSCalendar与NSDateComponents对象紧密相关。

你可以通过NSCalendar对象的currentCalendar方法来获得当前系统用户设置的日历。

C代码

NSCalendar *currentCalendar = [NSCalendar currentCalendar];

NSCalendar *japaneseCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSJapaneseCalendar];

NSCalendar *usersCalendar = [[NSLocale currentLocale] objectForKey:NSLocaleCalendar];

usersCalendar和currentCalendar对象是相等的,尽管他们是不同的对象。

你可以使用NSDateComponents对象来表示一个日期对象的组件——例如年,月,日和小时。如果要使一个NSDateComponents对象
有意义,你必须将其与一个日历对象相关联。下面的代码示例了如何创建一个NSDateComponents对象:

C代码

NSDateComponents *components = [[NSDateComponents alloc] init];

[components setDay:6];

[components setMonth:5];

[components setYear:2004];

NSInteger weekday = [components weekday]; // Undefined (== NSUndefinedDateComponent)

要将一个日期对象解析到相应的date components,你可以使用NSCalendar的components:fromDate:方法。此外日期本身,你需要指定NSDateComponents对象返回组件。

C代码

NSDate *today = [NSDate date];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];

NSInteger day = [weekdayComponents day];

NSInteger weekday = [weekdayComponents weekday];

同样你也可以从NSDateComponents对象来创建NSDate对象:

C代码

NSDateComponents *components = [[NSDateComponents alloc] init];

[components setWeekday:2]; // Monday

[components setWeekdayOrdinal:1]; // The first Monday in the month

[components setMonth:5]; // May

[components setYear:2008];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDate *date = [gregorian dateFromComponents:components];

为了保证正确的行为,您必须确保使用的组件在日历上是有意义的。指定“出界”日历组件,如一个-6或2月30日在公历中的日期值产生未定义的行为。

你也可以创建一个不带年份的NSDate对象,这样的操作系统会自动生成一个年份,但在后面的代码中不会使用其自动生成的年份。

C代码

NSDateComponents *components = [[NSDateComponents alloc] init];

[components setMonth:11];

[components setDay:7];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDate *birthday = [gregorian dateFromComponents:components];

下面的示例显示了如何从一个日历置换到另一个日历:

C代码

NSDateComponents *comps = [[NSDateComponents alloc] init];

[comps setDay:6];

[comps setMonth:5];

[comps setYear:2004];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDate *date = [gregorian dateFromComponents:comps];

[comps release];

[gregorian release];

NSCalendar *hebrew = [[NSCalendar alloc] initWithCalendarIdentifier:NSHebrewCalendar];

NSUInteger unitFlags = NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit;

NSDateComponents *components = [hebrew components:unitFlags fromDate:date];

NSInteger day = [components day]; // 15

NSInteger month = [components month]; // 9

NSInteger year = [components year]; // 5764

历法计算

在当前时间加上一个半小时:

C代码

NSDate *today = [[NSDate alloc] init];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];

[offsetComponents setHour:1];

[offsetComponents setMinute:30];

// Calculate when, according to Tom Lehrer, World War III will end

NSDate *endOfWorldWar3 = [gregorian dateByAddingComponents:offsetComponents toDate:today options:0];

获得当前星期中的星期天(使用格里高利历):

C代码

NSDate *today = [[NSDate alloc] init];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

// Get the weekday component of the current date

NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:today];

/*

Create a date components to represent the number of days to subtract from the current date.

The weekday value for Sunday in the Gregorian calendar is 1, so
subtract 1 from the number of days to subtract from the date in
question.  (If today is Sunday, subtract 0 days.)

*/

NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init];

[componentsToSubtract setDay: 0 - ([weekdayComponents weekday] - 1)];

NSDate *beginningOfWeek = [gregorian dateByAddingComponents:componentsToSubtract toDate:today options:0];

/*

Optional step:

beginningOfWeek now has the same hour, minute, and second as the original date (today).

To normalize to midnight, extract the year, month, and day components and create a new date from those components.

*/

NSDateComponents *components = [gregorian
components:(NSYearCalendarUnit | NSMonthCalendarUnit |
NSDayCalendarUnit) fromDate: beginningOfWeek];

beginningOfWeek = [gregorian dateFromComponents:components];

如何可以计算出一周的第一天(根据系统的日历设置):

C代码

NSDate *today = [[NSDate alloc] init];

NSDate *beginningOfWeek = nil;

BOOL ok = [gregorian rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek interval:NULL forDate: today];

获得两个日期之间的间隔:

C代码

NSDate *startDate = ...;

NSDate *endDate = ...;

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags fromDate:startDate toDate:endDate options:0];

NSInteger months = [components month];

NSInteger days = [components day];

使用Category来计算同一时代(AD|BC)两个日期午夜之间的天数:

C代码

@implementation NSCalendar (MySpecialCalculations)

-(NSInteger)daysWithinEraFromDate:(NSDate *) startDate toDate:(NSDate *) endDate {

NSInteger startDay=[self ordinalityOfUnit:NSDayCalendarUnit inUnit: NSEraCalendarUnit forDate:startDate];

NSInteger endDay=[self ordinalityOfUnit:NSDayCalendarUnit inUnit: NSEraCalendarUnit forDate:endDate];

return endDay-startDay;

}

@end

使用Category来计算不同时代(AD|BC)两个日期的天数:

C代码

@implementation NSCalendar (MyOtherMethod)

-(NSInteger) daysFromDate:(NSDate *) startDate toDate:(NSDate *) endDate {

NSCalendarUnit units=NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *comp1=[self components:units fromDate:startDate];

NSDateComponents *comp2=[self components:units fromDate endDate];

[comp1 setHour:12];

[comp2 setHour:12];

NSDate *date1=[self dateFromComponents: comp1];

NSDate *date2=[self dateFromComponents: comp2];

return [[self components:NSDayCalendarUnit fromDate:date1 toDate:date2 options:0] day];

}

@end

判断一个日期是否在当前一周内(使用格里高利历):

C代码

-(BOOL)isDateThisWeek:(NSDate *)date {

NSDate *start;

NSTimeInterval extends;

NSCalendar *cal=[NSCalendar autoupdatingCurrentCalendar];

NSDate *today=[NSDate date];

BOOL success= [cal rangeOfUnit:NSWeekCalendarUnit startDate:&start interval: &extends forDate:today];

if(!success)

return NO;

NSTimeInterval dateInSecs = [date timeIntervalSinceReferenceDate];

NSTimeInterval dayStartInSecs= [start timeIntervalSinceReferenceDate];

if(dateInSecs > dayStartInSecs && dateInSecs < (dayStartInSecs+extends)){

return YES;

}

else {

return NO;

}

}

来源:http://blog.csdn.net/lingedeng/article/details/6996599

1、获取当前时间

C代码

NSDateFormatter*formatter = [[NSDateFormatteralloc] init];

[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

NSString *locationString=[formatter stringFromDate: [NSDate date]];

另外的方法:

C代码

-(NSString *)getDate

{

NSDateFormatter*formatter = [[NSDateFormatteralloc] init];

[formatter setDateFormat:@"yyyy-MM-dd EEEE HH:mm:ss a"];

NSString *locationString=[formatter stringFromDate: [NSDate date]];

[formatter release];

return locationString;

}

//大写的H日期格式将默认为24小时制,小写的h日期格式将默认为12小时

//不需要特别设置,只需要在dataFormat里设置类似"yyyy-MMM-dd"这样的格式就可以了

日期格式如下:

y  年  Year  1996; 96

M  年中的月份  Month  July; Jul; 07

w  年中的周数  Number  27

W  月份中的周数  Number  2

D  年中的天数  Number  189

d  月份中的天数  Number  10

F  月份中的星期  Number  2

E  星期中的天数  Text  Tuesday; Tue

a  Am/pm 标记  Text  PM

H  一天中的小时数(0-23)  Number  0

k  一天中的小时数(1-24)  Number  24

K  am/pm 中的小时数(0-11)  Number  0

h  am/pm 中的小时数(1-12)  Number  12

m  小时中的分钟数  Number  30

s  分钟中的秒数  Number  55

S  毫秒数  Number  978

z  时区  General time zone  Pacific Standard Time; PST; GMT-08:00

Z  时区  RFC 822 time zone  -0800

2、NSTimer定时器的基本操作方式

NSTimer是Cocoa中比较常用的定时器类,基本操作如下:

handleTimer方法可以自行定义。在需要的地方创建timer即可,handleTimer就可以每0.5秒执行一次。

C代码

- (void) handleTimer: (NSTimer *) timer

{

//在这里进行处理

}

NSTimer *timer;

timer = [NSTimer scheduledTimerWithTimeInterval: 0.5 target: self
selector: @selector(handleTimer:)userInfo: nil repeats: YES];

3、定时器

设置定时器下面显示的定时器将在一秒钟后触发,并一直重复直到定时器被禁用。定时器每次激活时,就会调用发送选择器消息的目标来进行初始化。回调
方法带有一个参数,就是定时器本身.要禁用一个定时器,给它发送invalidate消息,这将释放定时器对象并把它从当前运行循环中删除。

C代码

NSTime *timer ;

timer = [NSTimer scheduledTimerWithTimeInterval:1.0target:self selector:@selector(handlTimer:) userInfo:nilrepeats:YES];

- (void)handleTimer:(NSTimer *)timer{

printf("timer count: %d", count++);

if(count > 3)

{

[timer invalidate];

}

来源: http://blog.csdn.net/imekong/article/details/7041312

1. 使用 NSTimeZone 取得世界各地时间的方法

下列程式码将示范,如何利用 NSTimeZone 取得世界上已知的时区名称,并且透过这些名称来获得当地时间,如果在系统时间的取得上有任何疑问,可以参考取得 iOS 系统日期与星期的方法一文,其程式码如下。

C代码

//取得目前已知的所有地里名称

NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames];

//取得本地目前时间

NSDate *date = [NSDate date];

for(NSString *name in timeZoneNames) {

NSTimeZone *timezone = [[NSTimeZone alloc] initWithName:name];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

//设定时间格式

[formatter setDateFormat:@"YYYY-MM-d HH:mm:ss"];

//设定时区

[formatter setTimeZone:timezone];

//时间格式正规化并做时区校正

NSString *correctDate = [formatter stringFromDate:date];

NSLog(@"地点:%@ 当地时间:%@",[timezone name], correctDate);

[formatter release];

[timezone release];

}

由于能取得的地点相当多,下图只是部份的执行结果。

来源: http://furnacedigital.blogspot.com/2011/10/nstimezone.html

2. 取得 iOS 系统日期与星期的方法

在之前的文章中已经说明如何取得 Device 里的 iOS 系统时间,在此将在示范如何使用 NSDate 取得系统的日期与星期,请看以下程式码。

C代码

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

NSDate *date = [NSDate date];

//正规化的格式设定

[formatter setDateFormat:@"YYYY-MM-dd' 'EEEE"];

//正规化取得的系统时间并显示

dateLabel.text = [formatter stringFromDate:date];

当然 NSFormatter 能正规化的格式不只这些,想知道其他的参数可以参考关于 NSDateFormatter 的二三事一文。

3. 取得 iOS 系统时间的方法

如何取得 Device 里的 iOS 系统时间,可以参考以下程式码。

C代码

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

NSDate *date = [NSDate date];

//正规化的格式设定

[formatter setTimeStyle:NSDateFormatterFullStyle];

//正规化取得的系统时间并显示

timeLabel.text = [formatter stringFromDate:date];

[formatter release];

在时间格式正规化的部份也有多种样式可供选择,其样式如下。

C代码

[formatter setTimeStyle:NSDateFormatterFullStyle];

[formatter setTimeStyle:NSDateFormatterLongStyle];

[formatter setTimeStyle:NSDateFormatterMediumStyle];

[formatter setTimeStyle:NSDateFormatterShortStyle];

最后,如果要让时间与现实时间同步可以考虑实做计时器 Timer 来解决此问题,详细的设定方式可参阅 Timer / 计时器的基本使用方法。

来源:http://furnacedigital.blogspot.com/2011/01/blog-post.html#more

4. Timer / 计时器的基本使用方法

这里介绍 Timer 的基本使用方法,首先设定 Timer 的相关的参数,程式码如下。(View-based Template)

C代码

//自行定义的函式,用来设定使用Timer/计时器的相关参数

-(void)initializeTimer {

//设定Timer触发的频率,每秒30次

float theInterval = 1.0/30.0;

fpsLabel.text = [NSString stringWithFormat:@"%0.3f", theInterval];

//正式启用Timer,selector是设定Timer触发时所要呼叫的函式

[NSTimer scheduledTimerWithTimeInterval:theInterval

target:self

selector:@selector(countTotalFrames:)

userInfo:nil

repeats:YES];

}

上述程式码,已经完成 Timer 的基本设定,而下列程式码则是 Timer 触发时所呼叫的函式写法。

C代码

-(void)countTotalFrames:(NSTimer *)theTimer {

frameCount ++;

framesLabel.text = [NSString stringWithFormat:@"%d", frameCount];

}

最后,别忘记在程式进入点这边要呼叫自行定义的 initializeTimer 函式,才能让 Timer 运作。

ios 对日期的处理(包括计算昨天时间、明天时间)的更多相关文章

  1. js获得昨天前天明天时间以及setDate()

    <script type="text/javascript"> function GetDateStr(AddDayCount) { var dd = new Date ...

  2. python获取当前,昨天,明天时间

    import datetime nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#现在 pastTimeMinutes = ...

  3. 【Linux】linux中通过date命令获取昨天或明天时间的方法

    date +"%F" 输出格式:2011-12-31 date +"%F %H:%M:%S" 输出格式:2011-12-31 16:29:50 这都是打印出系统 ...

  4. linux中通过date命令获取昨天或明天时间的方法

    date命令可以获取当前的时间,通过man,可以看到date有很多参数可以用,很容易做到格式化 # 获取当前日期 date +"%F" 或者 date +"%Y-%m-% ...

  5. iOS下日期的处理

    NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间 Dates         NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能.Date对象是 ...

  6. iOS下日期的处理(世界标准时转本地时间)

    NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间 Dates         NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能.Date对象是 ...

  7. linux中用shell获取昨天、明天或多天前的日期

    linux中用shell获取昨天.明天或多天前的日期 时间 -- :: BlogJava-专家区 原文 http://www.blogjava.net/xzclog/archive/2015/12/0 ...

  8. iOS开发UI篇—九宫格坐标计算

    iOS开发UI篇—九宫格坐标计算 一.要求 完成下面的布局 二.分析 寻找左边的规律,每一个uiview的x坐标和y坐标. 三.实现思路 (1)明确每一块用得是什么view (2)明确每个view之间 ...

  9. (转载)shell中用date命令获取昨天、明天或者多天前的日期

    (转载)http://blog.sina.com.cn/s/blog_3e4774e30100p0yv.html 使用date命令获取日期很方便,最近需要获取当前日期的下一天日期在linux应该如何获 ...

随机推荐

  1. javascript、js操作json对象和字符串互相转换方法

    相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格式 ...

  2. Lintcode---把排序树组转换为高度最小的二叉树

    给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树. 注意事项 There may exist multiple valid solutions, return any of them. ...

  3. Spring Cloud概述

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁 ...

  4. (Spring Boot框架)快速入门

    Spring Boot 系列文章推荐 Spring Boot 入门 Spring Boot 属性配置和使用 Spring Boot 集成MyBatis Spring Boot 静态资源处理 今天介绍一 ...

  5. Release Management

    1. Understand the current state of release management. test environment limitations how long to setu ...

  6. Android Shape 形状

    Shape继承体系: Shape (android.graphics.drawable.shapes) ----PathShape (android.graphics.drawable.shapes) ...

  7. 一个表空间offline后alert日志报ORA-01135 和ORA-01110的问题

    本文是原创文章.转载请注明出处:http://blog.csdn.net/msdnchina/article/details/44336789 近期遇到一个案例,是将一个表空间offline之后,al ...

  8. MacBook Air 2014 安装win7

    1.准备一个4G以上容量USB3.0 U盘.制作一个带USB3.0驱动的win7 2.将制作好的win7iso镜像文件复制到macbook上,插上U盘,运行Boot Camp助理: 3.选择默认勾选项 ...

  9. echarts 百度图表

    手册说明 http://echarts.baidu.com/option.html 3.0版本加了很多新属性可以看以上链接  此文用的3.x版本 第一步 引入 <script src=" ...

  10. 一款基于jQuery的热点新闻Tab选项卡插件

    今天要分享的jQuery焦点图插件非常适合展示热点新闻,之前我们分享过好多基于jQuery的焦点图插件,效果都还很不错.它可以在图片上方展示文字标题,并且焦点图的切换按钮时tab风格的,图片切换也十分 ...