iOS-NSDate 相差 8 时辰

By admin in 天文台 on 2019年1月23日

 

天文台, 转载自:http://blog.csdn.net/diyagoanyhacker/article/details/7096612

 

NSDate存储的是社会风气标准时(UTC),输出时必要基于时区转换为本土时间

 

恍如是从ios4.1方始[NSDate
date];获取的是GMT时间,那一个小时和Hong Kong时间相差8个时辰,以下代码可以缓解那一个题材

//方法一

– (void)tDate

{

    NSDate *date = [NSDatedate];

    NSTimeZone *zone =
[NSTimeZonesystemTimeZone];

    NSInteger interval = [zone secondsFromGMTForDate: date];

    NSDate *localeDate = [date  dateByAddingTimeInterval: interval];  

    NSLog(@”%@”,
localeDate);

}

方法二

– (NSString*)dateAsString:(NSDate*)date

 {

/* Create a single string expressing a mountain’s
climbed date, properly localized */

NSString *returnValue =
@””;

    NSDateFormatter *dateFormatter =
nil;

if (date != nil) {

if (dateFormatter ==nil)
{

dateFormatter = [[NSDateFormatteralloc]init];

}

//原文地址:http://blog.csdn.net/diyagoanyhacker/article/details/7096612

//作者:禚来强

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

[dateFormatter setLocale:[NSLocalecurrentLocale]];

returnValue = [dateFormatter
stringFromDate:date];

}

/* As this code uses the current “locale”, the date
format will be in the format 

     specified by the user’s “Region Format” settings.  If you need to
use an

     alternate format internally, you can create and use NSLocales,
e.g.:

 

     NSLocale *enGBLocale = [[NSLocale alloc]
initWithLocaleIdentifier:@”en_GB”];

     [numberFormatter setLocale:enGBLocale];

 

     Doing so will not affect the current user-set language or region
format. 

     

     Similarly, while you should always rely on the system and
application bundle

     to pick the most appropriate resources for the current user
language setting,

     if you need to know what the current user language setting is, you
can do

     something like the following:

 

     NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];

     NSArray* languages = [defs objectForKey:@”AppleLanguages”];

     NSString* preferredLang = [languages objectAtIndex:0];

     NSLog(@”Current language is %@”, preferredLang);

 

     Note that the iPhone does not support locales in the same way that
Mac OS

     does (really only using locales for the Region Format settings) so
if you

     try and get an array from standardUserDefaults for the key
“AppleLocale”,

     this will fail on the iPhone. */

return returnValue;

}

//方法三

+ (NSString *)fixStringForDate:(NSDate *)date 

{

    NSDateFormatter* dateFormatter =
[[NSDateFormatteralloc]init];

    [dateFormatter setDateStyle:kCFDateFormatterFullStyle];

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

    NSString *fixString = [dateFormatter stringFromDate:date]; 

    [dateFormatter release];

    return fixString;

}

方法四

    NSDateComponents *comps =
[[NSDateComponentsalloc]init];

    [comps setYear:2010];

    [comps setMonth:8];

    [comps setDay:24];

    [comps setHour:17];

    [comps setMinute:5];

    [comps setTimeZone: [NSTimeZonetimeZoneWithAbbreviation:@”UTC”]];

    NSLog(@”%@”, [NSTimeZonetimeZoneWithAbbreviation:@”UTC”]);

    

    NSCalendar *cal =
[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];

    NSDate *referenceTime = [cal
dateFromComponents:comps];

    NSLog(@”%@”,
referenceTime);

 

以下新闻为转发

 

GMT、UTC与24时区 等时间概念

 许
三个人都晓得两地时间表简称为GMT或UTC,而世界时区表则通称为World
提姆e,那么GMT与UTC的面目原意又是干什么?世界时区又是怎么区其他?面盘上铺天盖地的英文单词代表着什么意义与功力呢?那几个都是新手在接触两地时
间表或世界时区表时,脑海中所不断体现的种种问题,以下将带你一探时区奥妙的究竟。

 

世界时区及国际换日线示意图

天文台 1

 

天文台 2

举世24个时区的分开 
      相较于两地时间表,可以彰显世界各时区时间和地名的世界时区表(World
提姆e),就展示娇小与复杂多了,平时世界时区表的表盘上会标示着海内外24个时区的城池称号,但究竟那24个时区是什么样暴发的?过归西界各地原本各自订
定当地时间,但随着交通和电讯的发达,各地互换日益频仍,分化的地点时间,造成许多麻烦,于是在西元1884年的国际会议上制定了全世界性的正规化时,明定以
英帝国London格林(格林(Green))威治那一个地方为零度经线的源点(亦称作本初子午线),并以地球由西向北每24钟头自转七天360°,订定每隔经度15°,时差1钟头。而每
15°的经线则称之为该时区的焦点经线,将大地划分为24个时区,其中带有23个整时区及180°经线左右两侧的2个半时区。就满世界的时光来看,东经的年华
比西经要早,也就是一旦格林(格林(Green))威治时间是早晨12时,则中心经线15°E的时区为早上1时,中心经线30°E时区的岁月为深夜2时;反之,焦点经线15°W
的时区时间为中午11时,中心经线30°W时区的小时为下午10时。以山西为例,湖北放在东经121°,换算后与格林(格林)威治就有8钟头的时差。即使三个人同时
从格林(格林)威治的0°各向东、西方前进,当他俩在经线180°时,就会距离24小时,所以经线180°被定为国际换日线,由西向西通过此线时日期要减去一日,
反之,若由东向东则要加进一日。

 

格林(格林)威治标准时间GMT      
十七世纪,格林(格林(Green))威治皇家天文台为了海上霸权的恢弘计画而举办天体观测。1675年旧皇家观测所(Old
罗伊al Observatory)
正式确立,到了1884年决定以通过Green威治的子午线作为划分地球东西两半球的经度零度。观测所门口墙上有一个标明24小时的钟表,展现当下的时光,对全世界而言,那里所设定的年华是社会风气时间参考点,满世界都以格林(Green)威治的命宫作为正式来设定时间,那就是我们耳熟能详的「格林(格林(Green))威治标准时间」(格林wich
Mean
提姆e,简称G.M.T.)的案由,标示在手表上,则表示此表具有两地时间作用,也就是同时可以突显原居地和另一个国家的时刻。

 

世界和谐时间UTC
     
多数的两地时间表都以GMT来表示,但也稍微两地时间表上看不到GMT字样,出现的反倒是UTC那3个英文字母,究竟何谓UTC?事实上,UTC指的是
Coordinated Universal 提姆e-
世界和谐时间(又称世界标准时间、世界统一时间),是透过平分太阳时(以格林(Green)威治时间GMT为准)、地轴运动改良后的新时标以及以「秒」为单位的国际原子时所综合总结而成的光阴,统计进程卓殊严酷精密,由此若以「世界标准时间」的角度来说,UTC比GMT来得越来越精准。其误差值必须维持在0.9秒之内,若
大于0.9秒则由位于法国首都的国际地球自转事务焦点局发表闰秒,使UTC与地球自转周期一致。所以基本上UTC的真相强调的是比GMT更为可依赖的社会风气时间标
准,然而对在此之前天表款来说,GMT与UTC的成效与精确度是从未差距的。

 

春季节约时间DST
      所谓「春季节约时间」Daylight Saving
提姆e(简称D.S.T.),是指在夏天阳光升起的可比早时,将时钟拨快一时辰,以超后天光的施用,在大不列颠及北爱尔兰联合王国则号称夏令时间(Summer
提姆e)。这几个构想于1784年由米国班杰明·富兰克林提议来,1915年德意志变为第四个正式推行夏令日光节约时间的国家,以压缩灯光照明和耗电花费。
自此之后,全世界以南美洲和北美为主的约70个国家都引用那一个做法。近日被划分成多个时区的印度也正在协商是还是不是全国该联合执行夏令日光节约时间。欧洲手机上也
有成百上千GSM系统的驻地台,除了会传送当地时间外也包罗夏令日光节约时间,做为手机的时间标准,使用者可以自行决定要拉开或关闭。值得注意的是,某些国家
有实践「夏天节约时间」的制度,出国时别忘了跟随当地习惯在表上调整一下,那然则机械表没有的作用设计哦!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 亚洲必赢手机官网 版权所有