iOS 日历类(NSCalendar)

对于时间的操作在开发中很常见,但有时候我们需要获取到一年后的时间,或者一周后的时间.靠通过秒数计算是不行的.那就牵扯到另外一个日历类(NSCalendar).
下面先简单看一下 NSDate

let date = NSDate()let formatter = NSDateFormatter()
 formatter.dateFormat = "yyyy-MM-dd HH-mm-ss"formatter.stringFromDate(date)// 延迟多少秒为正数 前多少秒为负数let date2 = date.dateByAddingTimeInterval(500)
formatter.stringFromDate(date2)// 返回两个时间较早的时间let earlierDate = date.earlierDate(date2)// 返回较晚的时间let laterDate = date.laterDate(date2)

通过上面我们发现计算两天之间的差我们可以推迟3600 *24,一个月呢,有时候30天,有时候31天.那就难以计算了.
下面看看如何使用 NSCalendar.

// 日历获取在9.x之后的系统使用currentCalendar会出异常。在8.0之后使用系统新API。
//let calendar = NSCalendar.currentCalendar()
// 需要传的是一个字符串, 因为日历可以有很多种 这里选择的是公历let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)  // 8.0以后的新方法  /*
日历的类型
 @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierGregorian instead")
 public let NSGregorianCalendar: String // 公历
 @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierBuddhist instead")
 public let NSBuddhistCalendar: String // 佛历
 @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierChinese instead")
 public let NSChineseCalendar: String // 农历
 @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierHebrew instead")
 public let NSHebrewCalendar: String // 希伯来日历
 @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierIslamic instead")
 public let NSIslamicCalendar: String // 伊斯兰日历
 @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierIslamicCivil instead")
 public let NSIslamicCivilCalendar: String // 伊斯兰民事日历
 @available(iOS, introduced=2.0, deprecated=8.0, message="Use NSCalendarIdentifierJapanese instead")
 public let NSJapaneseCalendar: String // 日本日历
 @available(iOS, introduced=4.0, deprecated=8.0, message="Use NSCalendarIdentifierRepublicOfChina instead")
 public let NSRepublicOfChinaCalendar: String // 中国日历
 @available(iOS, introduced=4.0, deprecated=8.0, message="Use NSCalendarIdentifierPersian instead")
 public let NSPersianCalendar: String // 波斯日历
 @available(iOS, introduced=4.0, deprecated=8.0, message="Use NSCalendarIdentifierIndian instead")
 public let NSIndianCalendar: String // 印度日历
 @available(iOS, introduced=4.0, deprecated=8.0, message="Use NSCalendarIdentifierISO8601 instead")  
public let NSISO8601Calendar: String // 国际标准化组织的国际标准日历
 */

有了日历的类我们就方便操作了,这里提供两种方法,
方法一:

// 日期比较的类let adcomps = NSDateComponents()
 adcomps.year = 1adcomps.month = -1adcomps.day = 1// 追加时间可以一次性设置多值let date5 =  calendar?.dateByAddingComponents(adcomps, toDate: date, options: .WrapComponents)
formatter.stringFromDate(date5!)

注意:

  • .WrapComponents无法进位的.也就是说满一月月份不会加1,而是 Day 循环.什么意思呢.
    比如今天是2016-07-07.只是设置adcomps.day = 24.那么得到的结果是2016-07-31;
    那么如果设置adcomps.day = 25呢,得到的结果不是2016-08-01,而是2016-07-01.也就是做 day 在循环,对于month的设置 效果是一样的.
    如果要进位使用其他的可选值
    在 OC 中直接设置 option 的值为0即可;

方法二:

let date6 = calendar?.dateByAddingUnit(.Year, value: 1, toDate: date, options: .WrapComponents)
时间: 2024-10-12 09:00:15

iOS 日历类(NSCalendar)的相关文章

ios系类教程之用instruments来检验你的app

ios系类教程之用instruments来检验你的app 为了节省大家的时间,提供一个演示的Demo给大家.代码传送门.下载后解压然后用xcode打开.编译运行APP后 然后在搜索框内输入任意词汇,点击结果你会看到下面的结果 正如你所见的,这个app很简单.程序其实调用的是Flickr的API,通过app顶部的搜索框执行搜索后在下面的tableview显示你搜索的搜索词,搜索词后面的括号内有搜索结果的个数,点击此行进入一个略所图的结果列表页面 如上图. 点击其中一行 进入图像的大图模式,在这个页

iOS方法类:CGAffineTransform

iOS方法类:CGAffineTransform的使用大概 CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0.0 这里附上的CGAffineTransform官方文档: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTr

Java Calendar日历类的使用

Calendar cal = Calendar.getInstance(); // 当前年 int year = cal.get(Calendar.YEAR); // 当前月 int month = (cal.get(Calendar.MONTH)) + 1; // 当前月的第几天:即当前日 int day_of_month = cal.get(Calendar.DAY_OF_MONTH); // 当前时:HOUR_OF_DAY(24小时制):HOUR(12小时制) int hour = cal

iOS 在类实现定义中声明成员变量的怪异方式

WebGL 规范(WebGL Specification) 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的漂亮人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 看看下面的使用方法,几年前系统地看过 Objective-C 2.0 的官方文档和那本

java日历类Calendar简单使用

import java.util.Calendar; import java.util.TimeZone; public class Test1 { public static void main(String[] args) { //指定东八区,即北京时间 Calendar cc = Calendar.getInstance(TimeZone.getTimeZone("GMT+8")); int year = cc.get(Calendar.YEAR); //月份是从0开始计数的,所

自写打印日历类

在论坛上看到有人在问打印日历的程序,今天下午空闲的时候写了一个日历类,简单的写了几个方法. calendar.h #include <string> using namespace std; #ifndef CALENDAR_H #define CALENDAR_H class Calendar{ public: Calendar(){} void printAllMonth(const int &year); void printOneMonth(const int &yea

IOS中 类扩展 xib

IOS中 类扩展 xib 一.类扩展(class extension,匿名分类) 1.格式 @interface 类名 () { // 成员变量... } // 方法声明... @end 2.作用 1> 写在.m文件中 2> 一般用来扩充私有成员变量.@property属性.方法等 二.随机数生成 1.arc4random() 会生成任意正整数和0 2.arc4random_uniform(100) 会生成0~99的整数(包括0和99) 三.UIView常见方法 1.addSubview:(U

日历类

1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Text.RegularExpressions; 6: using System.Globalization; 7:   8: namespace AnkeEdu.Tools 9: { 10: /// <summary> 11: /// 中国日历信息实体类 12: //

一位iOS教育类应用开发者是如何赚到60多万美元?

注:伯乐在线12月19日在@程序员的那些事 微博推荐了此文的英文原文,非常感谢@dotSlash 的翻译.  转眼距我写<我如何在iOS教育类应用中赚到20万美元>这篇博文已经一年多了,它在独立社区中相当受欢迎,要知道它曾经在Hacker News上排过第一呢!我觉得是时候继续跟进一下我2012年的经验了.先交代一下我的背景,我是法国一个全职独立开发者,当iPad一开始发售的时候我就开始做教育类App了.我之所以决定做教育类App是因为我和我内人几年前决定让我们的孩子在家里接受教育,我意识到i