iOS 本地时间与GMT时间相互转换

在了解转换方式之前,我们先来看看iOS支持的时间

一、NSDateFormatter常用格式化参数

格式化日期字符串,copy一份常用参数:

a: AM/PM (上午/下午)
A: 0~86399999 (一天的第A微秒)
c/cc: 1~7 (一周的第一天, 周天为1)
ccc: Sun/Mon/Tue/Wed/Thu/Fri/Sat (星期几简写)
cccc: Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday (星期几全拼)
d: 1~31 (月份的第几天, 带0)
D: 1~366 (年份的第几天,带0)
e: 1~7 (一周的第几天, 带0)
E~EEE: Sun/Mon/Tue/Wed/Thu/Fri/Sat (星期几简写)
EEEE: Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday (星期几全拼)
F: 1~5 (每月的第几周, 一周的第一天为周一)
g: Julian Day Number (number of days since 4713 BC January 1) 未知
G~GGG: BC/AD (Era Designator Abbreviated) 未知
GGGG: Before Christ/Anno Domini 未知
h: 1~12 (0 padded Hour (12hr)) 带0的时, 12小时制
H: 0~23 (0 padded Hour (24hr))  带0的时, 24小时制
k: 1~24 (0 padded Hour (24hr) 带0的时, 24小时制
K: 0~11 (0 padded Hour (12hr)) 带0的时, 12小时制
L/LL: 1~12 (0 padded Month)  第几月
LLL: Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec 月份简写
LLLL: January/February/March/April/May/June/July/August/September/October/November/December 月份全称
m: 0~59 (0 padded Minute) 分钟
M/MM: 1~12 (0 padded Month) 第几月
MMM: Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec
MMMM: January/February/March/April/May/June/July/August/September/October/November/December
q/qq: 1~4 (0 padded Quarter) 第几季度
qqq: Q1/Q2/Q3/Q4 季度简写
qqqq: 1st quarter/2nd quarter/3rd quarter/4th quarter 季度全拼
Q/QQ: 1~4 (0 padded Quarter) 同小写
QQQ: Q1/Q2/Q3/Q4 同小写
QQQQ: 1st quarter/2nd quarter/3rd quarter/4th quarter 同小写
s: 0~59 (0 padded Second) 秒数
S: (rounded Sub-Second) 未知
u: (0 padded Year) 未知
v~vvv: (General GMT Timezone Abbreviation) 常规GMT时区的编写
vvvv: (General GMT Timezone Name) 常规GMT时区的名称
w: 1~53 (0 padded Week of Year, 1st day of week = Sunday, NB: 1st week of year starts from the last Sunday of last year)
 一年的第几周, 一周的开始为周日,第一周从去年的最后一个周日起算
W: 1~5 (0 padded Week of Month, 1st day of week = Sunday) 一个月的第几周
y/yyyy: (Full Year) 完整的年份
yy/yyy: (2 Digits Year)  2个数字的年份
Y/YYYY: (Full Year, starting from the Sunday of the 1st week of year) 这个年份未知干嘛用的
YY/YYY: (2 Digits Year, starting from the Sunday of the 1st week of year) 这个年份未知干嘛用的
z~zzz: (Specific GMT Timezone Abbreviation) 指定GMT时区的编写
zzzz: (Specific GMT Timezone Name) 
Z: +0000 (RFC 822Timezone) 指定GMT时区的名称

 

实例:

http://blog.sina.com.cn/s/blog_60b45f230100i0r9.html

NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init]autorelease];
[dateFormatter setAMSymbol:@"AM"];
[dateFormatter setPMSymbol:@"PM"];
[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mmaaa"];
NSDate *date = [NSDate date];
NSString * s = [dateFormatter stringFromDate:date];

10/05/2010 03:49PM

yyyy:MM:dd G 'at' HH:mm:ss zzz

1996.07.10 AD at 15:08:56 PDT

EEE, MMM d, "yy

Wed,july 10, '99

h:mm a

12:08 PM

hh 'o"clock' a,zzzz

12 o'clock PM, Pacific Daylight Time

K:mm a, z

0:00 PM, PST

yyyyy,MMMM.dd GGG hh:mm aaa

01996.july.10 AD 12:08 PM


此外,我们需要更加留意GMT与UTC时间的转换。



二、本地时间与GMT时间相互转换


本地时间与GMT转换的应用场景是

①创建本地缓存

②服务器与本地文件缓存时间校验,因为服务器时间格式是GMT

③断点续传校验,否则无法更新文件

 ---------------------------------------本地时间转为GMT时间-------------------------------------------------
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter  setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
[dateFormatter  setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@"en"]];
[dateFormatter  setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss 'GMT'"];
NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];

 NSLog(@"GMT : %@",currentDateStr);
 
 ----------------------------------------GMT时间转为本地时间------------------------------------------------

 [dateFormatter  setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss 'GMT'"];
 NSDate *localeDate = [dateFormatter dateFromString:currentDateStr];
 /
 *这里设置为东八区,实际上,这种设置GMT+0800有些问题,我们更应该通过 [NSTimeZone localeTimeZone]获取,因为程序写在非正式环境,[NSTimeZone localeTimeZone]时区获
 *有些问题,这点我们以后再说
 */
 [dateFormatter  setTimeZone:[NSTimeZone timeZoneWithName:@"GMT+0800"]]; 
 [dateFormatter  setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
 NSString * localeTimeStr =[dateFormatter stringFromDate:localeDate];
 NSLog(@"Locale : %@", localeTimeStr);

[NSTimeZone localeTimeZone]应该获取本地时间,但是出现了意外,可能是环境变量的缘故

在Java中是成功的

	Date d=new Date();
	SimpleDateFormat format= (SimpleDateFormat) SimpleDateFormat.getDateInstance(0, Locale.ENGLISH);
	format.applyPattern("EEE, dd MMM yyyy HH:mm:ss z");
	format.setTimeZone(TimeZone.getTimeZone("GMT"));
	String gmtTime = format.format(d);
	System.out.println(gmtTime);
		
		
	Date gmtDate = format.parse(gmtTime);
	format.applyPattern("yyyy-MM-dd HH:mm:ss");
	format.setTimeZone(TimeZone.getDefault());
	String localeTime = format.format(gmtDate);
	System.out.println(localeTime);





你可能感兴趣的:(GMT,时间转为本地时间,本地时间转为GMT时间)