開發(fā)中遇到了要從服務器請求時間,和model里的時間比較踱侣,剛開始就是拿著系統(tǒng)方法直接比較發(fā)現(xiàn)粪小,不能精確到秒,要求是過完凌晨12點算一天抡句。倆個時間必須統(tǒng)一格式探膊,否則,判斷不出待榔。時間又分為國際時間和本地時間只說突想,真是不用不知道,一用發(fā)現(xiàn)還有很多區(qū)別究抓,所以寫下這篇文章猾担,供以后查閱。
時間格式:@"2017-09-27 11:30:15"entity.PublishTime
倆個時間要統(tǒng)一格式刺下,后面的判斷可以根據(jù)自己的需求改動绑嘹,我這里要精確到相差到11小時35分,判斷寫的很垃圾橘茉,但是能看懂工腋。
//國際UTC轉本地時間
- (NSDate*)getNowDateFromatAnDate:(NSDate*)anyDate {
//設置源日期時區(qū)
NSTimeZone* sourceTimeZone = [NSTimeZonetimeZoneWithAbbreviation:@"UTC"];//或GMT
//設置轉換后的目標日期時區(qū)
NSTimeZone* destinationTimeZone = [NSTimeZonelocalTimeZone];
//得到源日期與世界標準時間的偏移量
NSIntegersourceGMTOffset = [sourceTimeZonesecondsFromGMTForDate:anyDate];
//目標日期與本地時區(qū)的偏移量
NSIntegerdestinationGMTOffset = [destinationTimeZonesecondsFromGMTForDate:anyDate];
//得到時間偏移量的差值
NSTimeIntervalinterval = destinationGMTOffset - sourceGMTOffset;
//轉為現(xiàn)在時間
NSDate* destinationDateNow = [[NSDatealloc]initWithTimeInterval:intervalsinceDate:anyDate];
returndestinationDateNow;
}
//比較兩時間的前后
- (int)compareOneDay:(NSDate*)oneDay withAnotherDay:(NSDate*)anotherDay{
NSCalendar*gregorian =[[NSCalendaralloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
unsignedintunitFlags=NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|kCFCalendarUnitHour|kCFCalendarUnitMinute|kCFCalendarUnitSecond;
NSDateComponents*comps=[gregoriancomponents:unitFlagsfromDate:oneDaytoDate:anotherDayoptions:0];
NSIntegeryear= [compsyear];
NSIntegermonth = [compsmonth];
NSIntegerday= [compsday];
NSIntegerhour= [compshour];
NSIntegermin= [compsminute];
NSIntegersecond = [compssecond];
if(year>0) {
? ? return0;
}
if(month>0&&year<=0) {
? ? ? ?return0;
}
if(month<=0&&year<=0&&day>0) {
? ? ? ?return0;
}
if(day<=0||month<=0||year<=0) {
? ? ?if(day<0||month<0||year<0) {
? ? ? ? ? ? ? ? ?return1;
}
if(hour<-11) {
? ? ? ?return1;
}else if(hour>-11) {
? ? ? ?return0;
}else ?if(hour==-11) {
if(min>-35) {
? ? return0;
}else if(min<-35){
? ? return1;
}else{
if(second>=0) {
? ?return0;
}else{
? ?return1;
}
}
}else{
? ?return0;
}
}else{
? ? return0;
}
}