日期与时间(Date&Time)
OC为了处理日期与时间,提供了NSDate、NSCalendar对象,还提供了日期格式器来处理日期与字符串之间的转换。
日期与时间(NSDate)
类方法[NSDate date]获取代表当前日期时间的NSDate
获取从当前时间开始,一天之后的日期
[[NSDate alloc] initWithTimeIntervalSinceNow: 3600*24];
initWithTimeIntervalSinceNow:从现在开始用时间间隔初始化
大量以init开头的方法来初始化NSDate对象
第一个:- (id)initWithTimeIntervalSinceNow:(NSTimeInterval)seconds
以当前时间的偏移秒数来初始化,也可以直接调用类方法 + (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)seconds
第二个:获取从1970年1月1日开始的日期
初始时间为:Thu Jan 1 08:00:00 1970
第三个:initWithTimeInterval 加入秒再加日期
NSLocale* cn = [NSLocale currentLocale];
//current当前的,locale场所,发生地,地点
//获取NSdate在当前locale下对应的字符串
NSLog(@"%@", [date1 descriptionWithLocale:cn]);
//description with locale 当前地点的描述(日期格式以及文字都会变成中国的标准时间)
获取两个日期中,较为早/晚的日期
NSDate* earlier/later = [date1 earlier/laterDate:date2];
获取两个时间之间的时间差
NSLog(@“%g”, [date1 timeIntervalSinceDate:date2]);
[- (NSTimeInterval)timeIntervalSinceNow]
返回当前对象时间与客户端时间的相隔秒数,也可以这样理解:从客户端当前时间开始,经过多少秒到达对象指定时间。
从上面的代码可以看出,创建NSDate的类方法与实例方法基本类似,只是类方法以date开头而实例方法以init开头。一旦得到NSDate对象,两个NSDate之间就可以比较大小,可以计算两个NSDate之间的时间差,也可以把NSDate转换为符合当前NSLocale的格式字符串。
日期格式器(NSDateFormatter)
NSDateFormatterNoStyle:不显示日期,时间的风格。
NSDateFormatterShortStyle:显示短的日期,时间风格
NSDateFormatterMediumStyle:显示中等的日期,时间风格
NSDateFormatterLongStyle:显示长的日期,时间风格
NSDateFormatterFullStyle:显示完整的日期,时间风格
如果打算使用自定义的格式模版,可以调用NSDateFormatter的setDateFormatter方法,设置日期,时间的模版即可。
如果需要将NSString转换为NSDate,调用NSDateFormatter的dateFromString方法,执行格式化即可。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
//需要被格式化的时间为从1970年1.1开始,20年后的日期
NSDate* dt = [NSDate dateWithTimeIntervalSince1970:20*366*24*3600];
//创建两个NSLocale,分别代表中国,美国
NSLocale* locales[] = {[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"],
[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]};
NSDateFormatter* df[8];
//为上面两个NSLocale创建8个DateFormat对象
for (int i=0; i<2; i++) {
df[i * 4] = [[NSDateFormatter alloc] init];
//设置NSDateFormatter的日期,时间风格
[df[i * 4] setDateStyle:NSDateFormatterShortStyle];
[df[i * 4] setTimeStyle:NSDateFormatterShortStyle];
//设置NSDateFormatter的NSLocale
[df[i * 4] setLocale:locales[i]];
df[i * 4 + 1] = [[NSDateFormatter alloc] init];
//设置NSDateFormatter的日期,时间风格
[df[i * 4 + 1] setDateStyle:NSDateFormatterMediumStyle];
[df[i * 4 + 1] setTimeStyle:NSDateFormatterMediumStyle];
//设置NSDateFormatter的NSLocale
[df[i * 4 + 1] setLocale:locales[i]];
df[i * 4 + 2] = [[NSDateFormatter alloc] init];
//设置NSDateFormatter的日期,时间风格
[df[i * 4 + 2] setDateStyle:NSDateFormatterLongStyle];
[df[i * 4 + 2] setTimeStyle:NSDateFormatterLongStyle];
//设置NSDateFormatter的NSLocale
[df[i * 4 + 2] setLocale:locales[i]];
df[i * 4 + 3] = [[NSDateFormatter alloc] init];
//设置NSDateFormatter的日期,时间风格
[df[i * 4 + 3] setDateStyle:NSDateFormatterFullStyle];
[df[i * 4 + 3] setTimeStyle:NSDateFormatterFullStyle];
//设置NSDateFormatter的NSLocale
[df[i * 4 + 3] setLocale:locales[i]];
}
for (int i=0; i<2; i++) {
switch (i) {
case 0:
NSLog(@"----------中国日期格式----------");
break;
case 1:
NSLog(@"----------美国日期格式----------");
break;
}
NSLog(@"SHORT格式的日期格式:%@",[df[i * 4] stringFromDate:dt]);
NSLog(@"MEDIUM格式的日期格式:%@",[df[i * 4 + 1] stringFromDate:dt]);
NSLog(@"LONG格式的日期格式:%@",[df[i * 4 + 2] stringFromDate:dt]);
NSLog(@"FULL格式的日期格式:%@",[df[i * 4 + 3] stringFromDate:dt]);
}
NSDateFormatter* df2 = [[NSDateFormatter alloc] init];
//设置自定义的格式器模版
[df2 setDateFormat:@"公元yyyy年MM月DD日 HH时mm分"];
//执行格式化
NSLog(@"%@",[df2 stringFromDate:dt]);
NSString* dateStr = @"2013-03-12";
NSDateFormatter* df3 = [[NSDateFormatter alloc] init];
//根据日期字符串的格式设置格式模版
[df3 setDateFormat:@"yyyy-MM-dd"];
//将字符串转换为NSDate对象
NSDate* date2 = [df3 dateFromString:dateStr];
NSLog(@"%@",date2);
}
return 0;
}
日历(NSCalendar)与日期组件(NSDateComponents)
日历(NSCalendar)
程序提供了3个输入框,用于分别输入年、月、日的数值,接下来需要将年、月、日数值转换为NSDate
得到一个NSDate 对象后,程序需要获取该NSDate 中包含的年份、月份、第几日。这些都需要将NSDate的各个字段数值分开提取。为了能分开处理NSDate 对象所包含的各个字段的数据,Foundation 框架提供了NSCalendar 对象。
两种常用方法
1.(NSDateComponents*)components:fromDate:
从NSDate中提取年,月,日时,分,秒各时间字段的信息
2.dataFromComponents:(NSDateComponents*)comps:
使用comps对象包含的年月日时分秒各时间字段的信息来创建NSDate
NSDateComponents对象用于封装年月日时分秒等各个字段的信息
从NSDate对象中获取各时间字段的数值步骤如下:
● 创建NSCalendar对象
● 调用NSCalendar的components:fromDate:方法来获取NSDate对象中的各时间字段的数值,该方法返回一个NSDateCoponents对象
● 调用NSDateComponents对象的getter方法来获取各时间字段的数值
#import<Foundation/Foundation.h>
int main(int argc, char* argv[])
{
@autoreleasepool {
NSCalendar* gregorian=[[NSCalendar alloc]
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate* dt=[NSDate date];
unsigned unitFlags=NSCalendarUnitYear|
NSCalendarUnitMonth |NSCalendarUnitDay |
NSCalendarUnitHour |NSCalendarUnitMinute|
NSCalendarUnitSecond |NSCalendarUnitWeekday;
NSDateComponents* comp=[gregorian components: unitFlags
fromDate:dt];
NSLog(@"现在是%ld年",comp.year);
NSLog(@"现在是%ld月",comp.month);
NSLog(@"现在是%ld日",comp.day);
NSLog(@"现在是%ld时",comp.hour);
NSLog(@"现在是%ld分",comp.minute);
NSLog(@"现在是%ld秒",comp.second);
NSLog(@"现在是%ld星期",comp.weekday);
NSDateComponents* comp2=[[NSDateComponents alloc]init];
comp2.year=2022;
comp2.month=5;
comp2.day=29;
comp2.hour =3;
comp2.minute=34;
NSDate* date=[gregorian dateFromComponents:comp2];
NSLog(@"获取的日期为:%@",date);
}
}
原文地址:https://blog.csdn.net/cyberjack/article/details/125201199
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_17827.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!