zoukankan      html  css  js  c++  java
  • ios-学习点-日历工具类

    #import <Foundation/Foundation.h>
    #import "monthModel.h"
    #import "dayModel.h"
    #import "SolarAndLunerHeader.h"
    
    @interface PublicUtils : NSObject
    #pragma mark将时间本地化
    +(NSDate *)getLocalDataWithData:(NSDate *)date;
    
    #pragma mark获取天数
    +(NSRange)getRangefromSmallUtilInBigUtil:(NSDate *)date;
    
    #pragma mark获取小单位在大单位中得系数,主要用于根据日期获得今天是星期几,默认setfirstweekday为1就是从周日开头的
    +(NSInteger)getCountFromSmallUtilInBigUtil:(NSDate *)date;
    
    #pragma mark 获得当前月第一天的日期
    +(NSDate *)getCurrentMonthFirstDay;
    
    #pragma mark 获得次月第一天的日期
    +(NSDate *)getnextMonthFirstDay;
    
    #pragma mark 组装一个空白数据,当月到次月的数据没有变化的封装,具体细节由服务器中取出的数据再维护一下得出真实的数据
    +(NSMutableArray *)createFixedDData;
    
    
    #pragma mark 同步月份数据,只是星期同步
    +(void)copyWeekWithDictionary:(NSMutableArray *)array;
    
    @end
    /*
     1.date 转 NSDateComponents 通过日历会将时间本地化
     2.反过来,NSDateComponents 转date 会逆向行为会讲转出来的时间会转到0时区的时间
     总结:本地时间转NSDateComponents用本地化日历转的话,最好将日历的时区设置为0时区,否则就会2次本地化时间出错
     反过来也一样。
     */
    
    #import "PublicUtils.h"
    
    @implementation PublicUtils
    #pragma mark将时间本地化
    +(NSDate *)getLocalDataWithData:(NSDate *)date{
       NSTimeZone *timezone= [NSTimeZone systemTimeZone];
       NSInteger interval= [timezone secondsFromGMT];
      return  [date dateByAddingTimeInterval:interval];
    }
    
    
    #pragma mark获取天数
    +(NSRange)getRangefromSmallUtilInBigUtil:(NSDate *)date{
        NSCalendar *calendar = [NSCalendar currentCalendar];
        NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
        return range;
    }
    
    #pragma mark获取小单位在大单位中得系数,主要用于根据日期获得今天是星期几,默认setfirstweekday为1就是从周日开头的
    +(NSInteger)getCountFromSmallUtilInBigUtil:(NSDate *)date{
       NSCalendar *calendar = [NSCalendar currentCalendar];
      return  [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:date];
    }
    
    
    #pragma mark 获得当前月第一天的日期
    +(NSDate *)getCurrentMonthFirstDay{
       NSDate *date= [NSDate date];
       NSCalendar *calender= [NSCalendar currentCalendar];
       NSDateComponents *compt= [calender components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:date];
      [compt setDay:1];
       NSDate *currentdate= [calender dateFromComponents:compt];
      return [PublicUtils getLocalDataWithData:currentdate];
    }
    
    #pragma mark 获得次月第一天的日期
    +(NSDate *)getnextMonthFirstDay{
        NSDate *date= [NSDate date];
        NSCalendar *calender= [NSCalendar currentCalendar];//同比下面这个不用转成0时区
        NSDateComponents *compt= [calender components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:date];
        if (compt.month==12) {
            [compt setMonth:compt.month+1];
            [compt setYear:compt.year+1];
        }else {
            [compt setMonth:compt.month+1];
        }
         [compt setDay:1];
        NSDate *currentdate= [calender dateFromComponents:compt];
        return [PublicUtils getLocalDataWithData:currentdate];
    
    }
    
    #pragma mark 从日期里面获取各个元素
    +(NSDateComponents *)changeToCompontsFromDate:(NSDate *)date{
        NSCalendar *calender= [NSCalendar currentCalendar];
        [calender setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];//(设置这个的目的,传进来的是一个本地时间,再用本地是日历转一次,就会造成2次本地化就会有误差,所以将日历的时区转成0时区,来避免2次转换)
        NSDateComponents *compt= [calender components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond) fromDate:date];
        return compt;
    }
  • 相关阅读:
    1、线性DP 213. 打家劫舍 II
    如何在CentOS 8上安装Vtiger CRM?
    如何在不使用密码的情况下切换(su)到另一个用户帐户
    如何解决Ubuntu上的Busybox Initramfs错误
    Linux中的16个Echo命令示例
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Grafana
    如何在Ubuntu 20.04上安装Apache ZooKeeper
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Prometheus
    如何在CentOS 8上安装GlassFish
    如何在CentOS 8上安装Netdata Monitoring
  • 原文地址:https://www.cnblogs.com/liyang31tg/p/4281561.html
Copyright © 2011-2022 走看看