TimeSynDataSource.m 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. //
  2. // TimeSynDataSource.m
  3. // FunSDKDemo
  4. //
  5. // Created by XM on 2018/11/12.
  6. // Copyright © 2018年 XM. All rights reserved.
  7. //
  8. #import "TimeSynDataSource.h"
  9. #import "Header.h"
  10. @implementation TimeSynDataSource
  11. #pragma mark - 根据获取到的和零时区相差的分钟数,计算当前位于哪一个时区
  12. -(NSString *)parseTimeZone:(int)timeMin{
  13. NSString *content = @"";
  14. if (timeMin <= 0) {
  15. int value = abs(timeMin);
  16. int f = value / 60;
  17. NSString *temp = [NSString stringWithFormat:@"%i",f];
  18. if (value % 60 == 15){
  19. temp = [temp stringByAppendingFormat:@".25"];
  20. }
  21. else if (value % 60 == 30){
  22. temp = [temp stringByAppendingFormat:@".5"];
  23. }
  24. else if (value % 60 == 45){
  25. temp = [temp stringByAppendingFormat:@".75"];
  26. }
  27. content = [content stringByAppendingFormat:@"%@%@(%@)",TS("East"),temp,TS("Area")];
  28. }
  29. else if (timeMin > 0){
  30. int value = timeMin;
  31. int f = value / 60;
  32. NSString *temp = [NSString stringWithFormat:@"%i",f];
  33. if (value % 60 == 15){
  34. temp = [temp stringByAppendingFormat:@".25"];
  35. }
  36. else if (value % 60 == 30){
  37. temp = [temp stringByAppendingFormat:@".5"];
  38. }
  39. else if (value % 60 == 45){
  40. temp = [temp stringByAppendingFormat:@".75"];
  41. }
  42. content = [content stringByAppendingFormat:@"%@%@(%@)",TS("West"),temp,TS("Area")];
  43. }
  44. else{
  45. content = [content stringByAppendingFormat:@"0(%@)",TS("Zone")];
  46. }
  47. return content;
  48. }
  49. #pragma mark - 获取手机当前所在时区
  50. - (int)getSystemTimeZone {
  51. NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
  52. // 判断是否是夏令时
  53. NSDate *dateNow = [NSDate date];
  54. BOOL isDaylightSavingTime = [timeZone isDaylightSavingTimeForDate:dateNow];
  55. [NSTimeZone resetSystemTimeZone]; // 重置手机系统的时区
  56. NSInteger offset = [NSTimeZone localTimeZone].secondsFromGMT;
  57. float value = offset/3600.0;
  58. if (isDaylightSavingTime) {
  59. value--;
  60. }
  61. value = -value;
  62. int myTime = (int)(value * 60);
  63. return myTime;
  64. }
  65. #pragma mark - 获取手机当前时间
  66. - (NSString*)getSystemTimeString {
  67. time_t now = time(NULL);
  68. struct tm *pNow = localtime(&now);
  69. NSString *timeString = [NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d:%02d",
  70. pNow->tm_year + 1900,
  71. pNow->tm_mon + 1,
  72. pNow->tm_mday,
  73. pNow->tm_hour,
  74. pNow->tm_min,
  75. pNow->tm_sec];
  76. //上面的时间格式 例如:2018-11-02 19:20:56
  77. char szParam[128] = {0};
  78. sprintf(szParam, "{\"Name\":\"OPTimeSetting\",\"OPTimeSetting\":\"%s\"}",SZSTR(timeString));
  79. return NSSTR(szParam);
  80. }
  81. #pragma mark - 获取夏令时开始时间
  82. +(NSArray *)getDayLightSavingBeginTime{
  83. NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
  84. NSDateFormatter *formaterYMD = [[NSDateFormatter alloc] init];
  85. formaterYMD.dateFormat = @"yyyy-MM-dd";
  86. NSDate *date = [NSDate date];
  87. NSDateFormatter *formaterYear = [[NSDateFormatter alloc] init];
  88. formaterYear.dateFormat = @"yyyy";
  89. int bYear = 0,bMonth = 0,bDay = 0;
  90. NSString *strYear = [formaterYear stringFromDate:date];
  91. // 遍历查找当前时区下的夏令时范围
  92. for (int m = 1; m < 12; m++) {
  93. for (int d = 1 ; d < 31; d++) {
  94. NSString *ymd = [NSString stringWithFormat:@"%@-%@%i-%@%i",strYear,m >= 10 ? @"" : @"0",m,d >= 10 ? @"" : @"0",d];
  95. NSDate *dateBegin = [formaterYMD dateFromString:ymd];
  96. if ([timeZone isDaylightSavingTimeForDate:dateBegin]) {
  97. bYear = [strYear intValue];
  98. bMonth = m;
  99. bDay = d;
  100. return @[[NSNumber numberWithInt:bYear],[NSNumber numberWithInt:bMonth],[NSNumber numberWithInt:bDay]];
  101. }
  102. }
  103. }
  104. return @[[NSNumber numberWithInt:bYear],[NSNumber numberWithInt:bMonth],[NSNumber numberWithInt:bDay]];
  105. }
  106. #pragma mark - 获取夏令时结束时间
  107. +(NSArray *)getDayLightSavingEndTime{
  108. NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
  109. NSDateFormatter *formaterYMD = [[NSDateFormatter alloc] init];
  110. formaterYMD.dateFormat = @"yyyy-MM-dd";
  111. NSDate *date = [NSDate date];
  112. NSDateFormatter *formaterYear = [[NSDateFormatter alloc] init];
  113. formaterYear.dateFormat = @"yyyy";
  114. int eYear = 0,eMonth = 0,eDay = 0;
  115. NSString *strYear = [formaterYear stringFromDate:date];
  116. // 遍历查找当前时区下的夏令时范围
  117. for (int m = 12; m > 1; m--) {
  118. for (int d = 31 ; d > 1; d--) {
  119. NSString *ymd = [NSString stringWithFormat:@"%@-%@%i-%@%i",strYear,m >= 10 ? @"" : @"0",m,d >= 10 ? @"" : @"0",d];
  120. NSDate *dateBegin = [formaterYMD dateFromString:ymd];
  121. if ([timeZone isDaylightSavingTimeForDate:dateBegin]) {
  122. eYear = [strYear intValue];
  123. eMonth = m;
  124. eDay = d;
  125. return @[[NSNumber numberWithInt:eYear],[NSNumber numberWithInt:eMonth],[NSNumber numberWithInt:eDay]];
  126. }
  127. }
  128. }
  129. return @[[NSNumber numberWithInt:eYear],[NSNumber numberWithInt:eMonth],[NSNumber numberWithInt:eDay]];
  130. }
  131. @end