火爆的企鹅 · MySQL创建视图(CREATE VIEW)· 5 天前 · |
幸福的水煮肉 · 解决Mybatis报错:java.lang. ...· 昨天 · |
酷酷的馒头 · Solved: how to write ...· 昨天 · |
腼腆的香菇 · MySQL时间类型及获取、展示处理 - ...· 12 小时前 · |
刚分手的人字拖 · 属于你和周杰伦的夏天歌单,给我哭!_其他文化 ...· 2 周前 · |
性感的伤疤 · cpu仪表盘 js - OSCHINA - ...· 1 年前 · |
傻傻的镜子 · 优质电影电视剧免费观看网站推荐,收集资源多更 ...· 1 年前 · |
率性的红酒 · 经济参考报:国企共享服务建设迎来快速发展期- ...· 1 年前 · |
刀枪不入的核桃 · 罗马尼亚安全防范|罗马尼亚医疗|罗马尼亚保险 ...· 1 年前 · |
如何在Objective C或/和Swift中将UTC
NSDate
转换为本地时区NSDate?
从UTC日历到具有适当本地 NSTimeZone 的日历的 Convert the date 。
此处输入是字符串currentUTCTime (格式为08/30/2012 11:11)将输入时间转换为系统设置的时区时间
//UTC time
NSDateFormatter *utcDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[utcDateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
[utcDateFormatter setTimeZone :[NSTimeZone timeZoneForSecondsFromGMT: 0]];
// utc format
NSDate *dateInUTC = [utcDateFormatter dateFromString: currentUTCTime];
// offset second
NSInteger seconds = [[NSTimeZone systemTimeZone] secondsFromGMT];
// format it and send
NSDateFormatter *localDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[localDateFormatter setDateFormat:@"MM/dd/yyyy HH:mm"];
[localDateFormatter setTimeZone :[NSTimeZone timeZoneForSecondsFromGMT: seconds]];
// formatted string
NSString *localDate = [localDateFormatter stringFromDate: dateInUTC];
return localDate;
//This is basic way to get time of any GMT time.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm a"]; // 09:30 AM
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:1]]; // For GMT+1
NSString *time = [formatter stringFromDate:[NSDate date]]; // Current time
由于似乎没有人在使用
NSDateComponents
,我想我应该加入一个……在这个版本中,没有使用
NSDateFormatter
,因此没有字符串解析,并且
NSDate
不用于表示格林尼治标准时间(协调世界时)之外的时间。原始
NSDate
在变量
i_date
中。
NSCalendar *anotherCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:i_anotherCalendar];
anotherCalendar.timeZone = [NSTimeZone timeZoneWithName:i_anotherTimeZone];
NSDateComponents *anotherComponents = [anotherCalendar components:(NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitNanosecond) fromDate:i_date];
// The following is just for checking
anotherComponents.calendar = anotherCalendar; // anotherComponents.date is nil without this
NSDate *anotherDate = anotherComponents.date;
i_anotherCalendar
可以是
NSCalendarIdentifierGregorian
或任何其他日历。允许
i_anotherTimeZone
的
NSString
可以通过
[NSTimeZone knownTimeZoneNames]
获取,但
anotherCalendar.timeZone
可以是
[NSTimeZone defaultTimeZone]
、
[NSTimeZone localTimeZone]
或
[NSTimeZone systemTimeZone]
。
实际上是
anotherComponents
保存了新时区的时间。您将注意到
anotherDate
等于
i_date
,因为它以格林尼治时间(协调世界时)为单位。
将UTC时间转换为当前时区。
调用函数
NSLocale *locale = [NSLocale autoupdatingCurrentLocale];
NSString *myLanguageCode = [locale objectForKey: NSLocaleLanguageCode];
NSString *myCountryCode = [locale objectForKey: NSLocaleCountryCode];
NSString *rfc3339DateTimeString = @"2015-02-15 00:00:00"];
NSDate *myDateTime = (NSDate*)[_myCommonFunctions _ConvertUTCTimeToLocalTimeWithFormat:rfc3339DateTimeString LanguageCode:myLanguageCode CountryCode:myCountryCode Formated:NO];
函数
-NSObject*)_ConvertUTCTimeToLocalTimeWithFormat:rfc3339DateTimeString LanguageCode:(NSString *)lgc CountryCode:(NSString *)ctc Formated:(BOOL) formated
NSDateFormatter *sUserVisibleDateFormatter = nil;
NSDateFormatter *sRFC3339DateFormatter = nil;
NSTimeZone *timeZone = [NSTimeZone defaultTimeZone];
if (sRFC3339DateFormatter == nil)
sRFC3339DateFormatter = [[NSDateFormatter alloc] init];
NSLocale *myPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:[NSString stringWithFormat:@"%@", timeZone]];
[sRFC3339DateFormatter setLocale:myPOSIXLocale];
[sRFC3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
[sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
// Convert the RFC 3339 date time string to an NSDate.
NSDate *date = [sRFC3339DateFormatter dateFromString:rfc3339DateTimeString];
if (formated == YES)
NSString *userVisibleDateTimeString;
if (date != nil)
if (sUserVisibleDateFormatter == nil)
sUserVisibleDateFormatter = [[NSDateFormatter alloc] init];
[sUserVisibleDateFormatter setDateStyle:NSDateFormatterMediumStyle];
[sUserVisibleDateFormatter setTimeStyle:NSDateFormatterShortStyle];
// Convert the date object to a user-visible date string.
userVisibleDateTimeString = [sUserVisibleDateFormatter stringFromDate:date];
return (NSObject*)userVisibleDateTimeString;
return (NSObject*)date;
}
我编写此方法将日期时间转换为我们的LocalTimeZone
-Here (NSString *)TimeZone参数是服务器时区
-(NSString *)convertTimeIntoLocal:(NSString *)defaultTime :(NSString *)TimeZone
NSDateFormatter *serverFormatter = [[NSDateFormatter alloc] init];
[serverFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:TimeZone]];
[serverFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *theDate = [serverFormatter dateFromString:defaultTime];
NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init];
[userFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[userFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *dateConverted = [userFormatter stringFromDate:theDate];
return dateConverted;
}
将UTC日期转换为本地日期
-(NSString *)getLocalDateTimeFromUTC:(NSString *)strDate
NSDateFormatter *dtFormat = [[NSDateFormatter alloc] init];
[dtFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dtFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDate *aDate = [dtFormat dateFromString:strDate];
[dtFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dtFormat setTimeZone:[NSTimeZone systemTimeZone]];
return [dtFormat stringFromDate:aDate];
}
像这样使用
NSString *localDate = [self getLocalDateTimeFromUTC:@"yourUTCDate"];
请使用此代码。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDate *date = [dateFormatter dateFromString:@"2015-04-01T11:42:00"]; // create date from string
[dateFormatter setDateFormat:@"EEE, MMM d, yyyy - h:mm a"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *timestamp = [dateFormatter stringFromDate:date];
SwiftDate 库解决方案:
// Take date by seconds in UTC time zone
火爆的企鹅 · MySQL创建视图(CREATE VIEW) 5 天前 |
幸福的水煮肉 · 解决Mybatis报错:java.lang.IllegalArgumentException: invalid comparison:_java项目报:java.lang.illegalargumen 昨天 |
腼腆的香菇 · MySQL时间类型及获取、展示处理 - kosamino 12 小时前 |