| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- //
- // TimeSynDataSource.m
- // FunSDKDemo
- //
- // Created by XM on 2018/11/12.
- // Copyright © 2018年 XM. All rights reserved.
- //
- #import "TimeSynDataSource.h"
- #import "Header.h"
- @implementation TimeSynDataSource
- #pragma mark - 根据获取到的和零时区相差的分钟数,计算当前位于哪一个时区
- -(NSString *)parseTimeZone:(int)timeMin{
- NSString *content = @"";
- if (timeMin <= 0) {
- int value = abs(timeMin);
- int f = value / 60;
-
- NSString *temp = [NSString stringWithFormat:@"%i",f];
- if (value % 60 == 15){
- temp = [temp stringByAppendingFormat:@".25"];
- }
- else if (value % 60 == 30){
- temp = [temp stringByAppendingFormat:@".5"];
- }
- else if (value % 60 == 45){
- temp = [temp stringByAppendingFormat:@".75"];
- }
- content = [content stringByAppendingFormat:@"%@%@(%@)",TS("East"),temp,TS("Area")];
- }
- else if (timeMin > 0){
- int value = timeMin;
- int f = value / 60;
-
- NSString *temp = [NSString stringWithFormat:@"%i",f];
- if (value % 60 == 15){
- temp = [temp stringByAppendingFormat:@".25"];
- }
- else if (value % 60 == 30){
- temp = [temp stringByAppendingFormat:@".5"];
- }
- else if (value % 60 == 45){
- temp = [temp stringByAppendingFormat:@".75"];
- }
- content = [content stringByAppendingFormat:@"%@%@(%@)",TS("West"),temp,TS("Area")];
- }
- else{
- content = [content stringByAppendingFormat:@"0(%@)",TS("Zone")];
- }
- return content;
- }
- #pragma mark - 获取手机当前所在时区
- - (int)getSystemTimeZone {
- NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
- // 判断是否是夏令时
- NSDate *dateNow = [NSDate date];
- BOOL isDaylightSavingTime = [timeZone isDaylightSavingTimeForDate:dateNow];
-
- [NSTimeZone resetSystemTimeZone]; // 重置手机系统的时区
- NSInteger offset = [NSTimeZone localTimeZone].secondsFromGMT;
- float value = offset/3600.0;
-
- if (isDaylightSavingTime) {
- value--;
- }
- value = -value;
- int myTime = (int)(value * 60);
- return myTime;
- }
- #pragma mark - 获取手机当前时间
- - (NSString*)getSystemTimeString {
- time_t now = time(NULL);
- struct tm *pNow = localtime(&now);
- NSString *timeString = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d",
- pNow->tm_year + 1900,
- pNow->tm_mon + 1,
- pNow->tm_mday,
- pNow->tm_hour,
- pNow->tm_min,
- pNow->tm_sec];
- //上面的时间格式 例如:2018-11-02 19:20:56
- char szParam[128] = {0};
- sprintf(szParam, "{\"Name\":\"OPTimeSetting\",\"OPTimeSetting\":\"%s\"}",SZSTR(timeString));
- return NSSTR(szParam);
- }
- #pragma mark - 获取夏令时开始时间
- +(NSArray *)getDayLightSavingBeginTime{
- NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
-
- NSDateFormatter *formaterYMD = [[NSDateFormatter alloc] init];
- formaterYMD.dateFormat = @"yyyy-MM-dd";
-
- NSDate *date = [NSDate date];
- NSDateFormatter *formaterYear = [[NSDateFormatter alloc] init];
- formaterYear.dateFormat = @"yyyy";
-
- int bYear = 0,bMonth = 0,bDay = 0;
- NSString *strYear = [formaterYear stringFromDate:date];
- // 遍历查找当前时区下的夏令时范围
- for (int m = 1; m < 12; m++) {
- for (int d = 1 ; d < 31; d++) {
- NSString *ymd = [NSString stringWithFormat:@"%@-%@%i-%@%i",strYear,m >= 10 ? @"" : @"0",m,d >= 10 ? @"" : @"0",d];
-
- NSDate *dateBegin = [formaterYMD dateFromString:ymd];
-
- if ([timeZone isDaylightSavingTimeForDate:dateBegin]) {
- bYear = [strYear intValue];
- bMonth = m;
- bDay = d;
-
- return @[[NSNumber numberWithInt:bYear],[NSNumber numberWithInt:bMonth],[NSNumber numberWithInt:bDay]];
- }
- }
- }
-
- return @[[NSNumber numberWithInt:bYear],[NSNumber numberWithInt:bMonth],[NSNumber numberWithInt:bDay]];
- }
- #pragma mark - 获取夏令时结束时间
- +(NSArray *)getDayLightSavingEndTime{
- NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
-
- NSDateFormatter *formaterYMD = [[NSDateFormatter alloc] init];
- formaterYMD.dateFormat = @"yyyy-MM-dd";
-
- NSDate *date = [NSDate date];
- NSDateFormatter *formaterYear = [[NSDateFormatter alloc] init];
- formaterYear.dateFormat = @"yyyy";
-
- int eYear = 0,eMonth = 0,eDay = 0;
- NSString *strYear = [formaterYear stringFromDate:date];
- // 遍历查找当前时区下的夏令时范围
- for (int m = 12; m > 1; m--) {
- for (int d = 31 ; d > 1; d--) {
- NSString *ymd = [NSString stringWithFormat:@"%@-%@%i-%@%i",strYear,m >= 10 ? @"" : @"0",m,d >= 10 ? @"" : @"0",d];
-
- NSDate *dateBegin = [formaterYMD dateFromString:ymd];
-
- if ([timeZone isDaylightSavingTimeForDate:dateBegin]) {
- eYear = [strYear intValue];
- eMonth = m;
- eDay = d;
-
- return @[[NSNumber numberWithInt:eYear],[NSNumber numberWithInt:eMonth],[NSNumber numberWithInt:eDay]];
- }
- }
- }
-
- return @[[NSNumber numberWithInt:eYear],[NSNumber numberWithInt:eMonth],[NSNumber numberWithInt:eDay]];
- }
- @end
|