IOS 世界标准时间UTC /GMT 转为当前系统时区对应的时间

原创 2016年05月31日 11:55:07
- (NSDate *)getNowDateFromatAnDate:(NSDate *)anyDate  
{  
    //设置源日期时区  
    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];//或GMT  
    //设置转换后的目标日期时区  
    NSTimeZone* destinationTimeZone = [NSTimeZone localTimeZone];  
    //得到源日期与世界标准时间的偏移量  
    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:anyDate];  
    //目标日期与本地时区的偏移量  
    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:anyDate];  
    //得到时间偏移量的差值  
    NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;  
    //转为现在时间  
    NSDate* destinationDateNow = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:anyDate] autorelease];  
    return destinationDateNow;  
}  

例子演示:我的机器是北京时区东八区。

     //2013-08-03T12:53:51+0800     UTC时间格式下的北京时间,可以看到北京时间= UTC + 8小时。

    NSDateFormatter *dateFormatter = [[NSDateFormatterallocinit];

    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];

    NSDate *localDate = [dateFormatter dateFromString:@"2013-08-03T04:56:52+0000"];      +0000 表示的是当前时间是个世界时间。

    [dateFormatter release];

    

    NSLog(@"now Time = %@",[selfgetNowDateFromatAnDate:localDate]);


结果:

2013-08-03 12:57:33.391 xxxx[2547:c07] now Time = 2013-08-03 12:56:52 +0000


 以上注意一点,在转出来后带的时间是原参数anydate的时区,因此切不可再用NSDateFormatter 转换。否则会多增加一个时区的时间值。应该使用如下来提取字符串


    NSString *str = [NSStringstringWithFormat:@"%@",[selfgetNowDateFromatAnDate:localDate]];

    NSLog(@"str = %@",str);


注NSDate对象存放的日期始终是UTC的标准时间,可以根据这个时间进行其它时间的转换。因此上面算出来的时间中时区为 +0000,如果此时再转为字符串




几个转换函数

//NSString 2 NSDate

- (NSDate *)stringToDate:(NSString *)strdate

{

    NSDateFormatter *dateFormatter = [[NSDateFormatterallocinit];

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

    NSDate *retdate = [dateFormatter dateFromString:strdate];

    [dateFormatter release];

    return retdate;

}


//NSDate 2 NSString

- (NSString *)dateToString:(NSDate *)date

{

    NSDateFormatter *dateFormatter = [[NSDateFormatterallocinit];

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

    NSString *strDate = [dateFormatter stringFromDate:date];

    [dateFormatter release];

    return strDate;

}

//将本地日期字符串转为UTC日期字符串  
//本地日期格式:2013-08-03 12:53:51  
//可自行指定输入输出格式  
-(NSString *)getUTCFormateLocalDate:(NSString *)localDate  
{  
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];  
    //输入格式  
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];  
      
    NSDate *dateFormatted = [dateFormatter dateFromString:localDate];  
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];  
    [dateFormatter setTimeZone:timeZone];  
    //输出格式  
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];  
    NSString *dateString = [dateFormatter stringFromDate:dateFormatted];  
    [dateFormatter release];  
    return dateString;  
}  
  
//将UTC日期字符串转为本地时间字符串  
//输入的UTC日期格式2013-08-03T04:53:51+0000  
-(NSString *)getLocalDateFormateUTCDate:(NSString *)utcDate  
{  
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];  
    //输入格式  
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];  
    NSTimeZone *localTimeZone = [NSTimeZone localTimeZone];  
    [dateFormatter setTimeZone:localTimeZone];  
      
    NSDate *dateFormatted = [dateFormatter dateFromString:utcDate];  
    //输出格式  
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];  
    NSString *dateString = [dateFormatter stringFromDate:dateFormatted];  
    [dateFormatter release];  
    return dateString;  
}  

- (NSString *)getUTCFormatDate:(NSDate *)localDate

{

    NSDateFormatter *dateFormatter = [[NSDateFormatterallocinit];

    NSTimeZone *timeZone = [NSTimeZonetimeZoneWithName:@"UTC"];

    [dateFormatter setTimeZone:timeZone];

    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

    NSString *dateString = [dateFormatter stringFromDate:localDate];

    [dateFormatter release];

    return dateString;

}


- (NSDate *)getLocalFromUTC:(NSString *)utc

{

    NSDateFormatter *dateFormatter = [[NSDateFormatterallocinit];

    NSTimeZone *timeZone = [NSTimeZonelocalTimeZone];

    [dateFormatter setTimeZone:timeZone];

    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

    NSDate *ldate = [dateFormatter dateFromString:utc];

    [dateFormatter release];

    return ldate;

}


//以上注意字符串时的输入参数的格式,别外不要用%@来查看NSDate的值,因为本身存的就是UTC ,小心被误倒。将期转换出字符串来查看一下。


版权声明:本文为博主原创文章,未经博主允许不得转载。

ios UTC 时间格式转换

+ (NSString *)htcTimeToLocationStr:(NSString*)strM { NSDateFormatter *dateFormatter = [[NSDateFo...
  • lzylzy1991
  • lzylzy1991
  • 2016年05月09日 15:51
  • 265

iOS 关于时区转化问题

NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间 转载出处    -------->    点击打开链接 好像是从ios4.1开始[NSDate date];获取...
  • u010428259
  • u010428259
  • 2017年10月16日 16:19
  • 162

时间:UTC时间、GMT时间、本地时间、Unix时间戳

1.UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的。 2.UTC时间 与 本地时 UTC + 时区差 = 本地...
  • u012102306
  • u012102306
  • 2016年05月30日 15:52
  • 32800

iOS中对时间的处理(三)——各时区时间相互转化

手机本地系统时间转化为指定时区时间 NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames]; NSLog(@"array_%@",timeZo...
  • Winzlee
  • Winzlee
  • 2015年07月11日 17:15
  • 1742

Java时间处理(UTC时间和本地时间转换)

UTC时间和本地时间两者之间的转换
  • u013412772
  • u013412772
  • 2017年06月22日 20:25
  • 7992

JAVA实现UTC时间转换成北京时间

之前有一篇关于将UTC时间转换成北京时间的python文章(传送门),这次需要用到java版的,本以为这种小工具网上会很多,但是在网上搜了一圈之后发现都不尽人意。UTC就是世界标准时间,与北京时间相差...
  • u012062455
  • u012062455
  • 2017年11月27日 14:17
  • 870

UTC时间与当地时间

每个地区都有自己的本地时间,在网上以及无线电通信中时间转换的问题就显得格外突出。记录在此以备忘。 整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统...
  • DL88250
  • DL88250
  • 2007年11月22日 09:34
  • 3741

c# UTC时间和本地时间转换(北京时间)

1.UTC时间比(本地时间)北京时间晚8个小时 所以: UTC转北京时间:     System.DateTime dt = DateTime.Now;//本地时间:2016-8-8 1:47:35 ...
  • u010476739
  • u010476739
  • 2016年08月08日 01:49
  • 10640

CST,CET,UTC,GMT,DST,Unix时间戳几种常见时间概述与关系

1、UTC:  Universal Time Coordinated 协调世界时,又称世界标准时间 多数的两地时间表都以GMT来表示,但也有些两地时间表上看不到GMT字样,出现的反而是UTC这...
  • kongjiea
  • kongjiea
  • 2015年03月04日 16:26
  • 10205

IOS 世界标准时间UTC /GMT 转为当前系统时区对应的时间

- (NSDate *)getNowDateFromatAnDate:(NSDate *)anyDate { //设置源日期时区 NSTimeZone* sourceTimeZone ...
  • fengsh998
  • fengsh998
  • 2013年08月03日 15:48
  • 73842
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS 世界标准时间UTC /GMT 转为当前系统时区对应的时间
举报原因:
原因补充:

(最多只允许输入30个字)