如何用NSdate 的到24小时制 时间

如何用NSdate 的到24小时制 时间,第1张

将本地时间转换成指定时区的时间 <pre name="code" class="cpp"><p class="p2"> NSDateFormatter *formatter<span></span>= [[NSDateFormatter alloc] init]</p><p class="p2"> [formatter<span> </span>setDateFormat:<span class="s1">@"yyyy-MM-dd hh:mm:ss"</span>]</p><p class="p2"> <span class="s2">NSTimeZone</span>* timeZone = [<span class="s2">NSTimeZone</span><span class="s3">timeZoneWithName</span>:<span class="s1">@"Asia/Shanghai"</span>]<span class="s4">//</span><span class="s5">东八区时间</span></p><p class="p2"> [formatter setTimeZone:timeZone]</p><p class="p2"> <span class="s2">NSString</span>*loctime = [formatter stringFromDate:date]</p><p class="p2"> [formatter release]</p><p class="p3">

</p><p class="p1"><span class="s6"> </span>现在<span class="s6">loctime</span>就是指定时区的时间字符串了</p><p class="p1">

</p><p class="p1"><span class="s7">5</span>、将时间戳<span class="s6"></span>转变为标准时间</p><p class="p2"> NSTimeInterval time=[timestamp doubleValue]<span class="s4">// timetamp</span><span class="s5">为</span><span class="s4">“</span><span class="s5">时间戳</span><span class="s4">”</span><span class="s5">字符串</span></p><p class="p2"> <span class="s2">NSDate</span>*detaildate=[NSDate dateWithTimeIntervalSince1970:time]</p><p class="p2"> NSLog(<span class="s1">@"date:%@"</span>,[detaildate description])</p><p class="p3">

</p><p class="p4">

实现日期选取器:

想在每次加载软件的时间都能将选取器加载到当前的日期和时间,需要在viewDidLoad中创建一个新的NSDate对象,通过这种方式创建这个对象包含当前的时间和时间。然后将datePicker设置为该日期,这样就可以确保每次从nib中加载此视图时,选取器都会重置为当前得日期和时间..-(void)viewDidLoad{

NSDate *now = [[NSDate alloc]init]

[datePicker setDate:now animated:NO]

[now release]}

然后在你需要获取日期的方法中:

NSDate *selected = [datePicker date]

你可以获取到当前0时区的时间,如果需要设置日期的格式需要添加如下的格式订制:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]

这是规定了西八时区的时间格式。

一、给定一个10位时间戳,转成不同时区的日期

//给定一个时间戳

NSString *test = @"1652861974”

//转成北京时区下的日期

NSDateFormatter *beijingFormatter = [[NSDateFormatter alloc] init]

[beijingFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]

NSTimeZone *beijingZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT+0800"]

[beijingFormatter setTimeZone:beijingZone]

//转成手机系统设置的时区(纽约)下的日期

NSDateFormatter *localFormatter = [[NSDateFormatter alloc] init]

[localFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]

NSTimeZone *localZone = [NSTimeZone systemTimeZone]//当前手机设置的是纽约时区

[localFormatter setTimeZone:localZone]

 NSDate* testDate = [NSDate dateWithTimeIntervalSince1970:[test longLongValue]]

NSString* beijingDateString = [beijingFormatter stringFromDate: testDate]//北京时区下的日期字符串 :“2022-05-18 16:19:34”

NSString* localTimeString = [localFormatter stringFromDate: testDate]// 换成本地(纽约)时间:2022-05-18 04:19:34

NSLog(@"服务器返回北京时间:%@ 转换成本地时区时间:%@ ", beijingDateString, localTimeString)

结果打印: 服务器返回北京时间:2022-05-18 16:19:34 转换成本地时区时间:2022-05-18 04:19:34

二、反向验证同一时刻下世界在不同时区的日期返回的时间戳是相同的:

北京时区日期: 2022-05-18 16:19:34 ( 以上的beijingDateString对应的 )

纽约时区日期: 2022-05-18 04:19:34( 以上的localTimeString对应的 )

NSDate *beiDate = [beijingFormatter dateFromString: beijingDateString]

NSTimeIntervalbeiInterval = [beiDate   timeIntervalSince1970]

NSDate*LocDate = [localFormatter   dateFromString: localTimeString]

NSTimeIntervalLocInterval = [LocDate  timeIntervalSince1970]

NSLog(@"原始时间戳:%@ 北京时区生成时间戳:%f  本地时区生成时间戳:%f ",test,( double )beiInterval,( double ) LocInterval)

结果打印:  原始时间戳:1652861974  北京时区生成时间戳:1652861974.000000   本地时区生成时间戳:1652861974.000000 

验证了同一时刻虽然处于世界不同时区,但是拿到的时间戳是一样的,前提是转成对应时区下的日期即 NSDateFormatter要设置对应的时区。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11103940.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存