#import <Foundation/Foundation.h>

void other();
void string2date(); int main(int argc, const char * argv[]) {
@autoreleasepool {
other(); string2date();
}
return ;
} void other()
{
// 获得NSCalendar
NSCalendar *calendar = nil;
if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
} else {
calendar = [NSCalendar currentCalendar];
} NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSLog(@"%zd", [calendar isDateInToday:[fmt dateFromString:@"2015-11-10 01:09:56"]]); } void dateCompare3()
{
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // 时间字符串
NSString *createdAtString = @"2015-11-01 09:10:05";
NSDate *createdAtDate = [fmt dateFromString:createdAtString]; // 其他时间
NSString *otherString = @"2015-10-31 08:56:45";
NSDate *otherDate = [fmt dateFromString:otherString]; // 获得NSCalendar
NSCalendar *calendar = nil; if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
} else {
calendar = [NSCalendar currentCalendar];
} // 获得日期之间的间隔
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *cmps = [calendar components:unit fromDate:createdAtDate toDate:otherDate options:]; NSLog(@"%@", cmps);
} void dateCompare2()
{
// 时间字符串
NSString *createdAtString = @"2015-11-20 09:10:05";
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *createdAtDate = [fmt dateFromString:createdAtString]; // 手机当前时间
// NSDate *nowDate = [NSDate date]; // 获得createdAtDate和nowDate的时间间隔(间隔多少秒)
// NSTimeInterval interval = [nowDate timeIntervalSinceDate:createdAtDate];
NSTimeInterval interval = [createdAtDate timeIntervalSinceNow]; NSLog(@"%f", interval);
} void dateCompare()
{
// 时间字符串
NSString *createdAtString = @"2015-11-20 11:10:05";
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *createdAtDate = [fmt dateFromString:createdAtString]; // 手机当前时间
NSDate *nowDate = [NSDate date]; /**
NSComparisonResult的取值
NSOrderedAscending = -1L, // 升序, 越往右边越大
NSOrderedSame, // 相等
NSOrderedDescending // 降序, 越往右边越小
*/
// 获得比较结果(谁大谁小)
NSComparisonResult result = [nowDate compare:createdAtDate];
if (result == NSOrderedAscending) { // 升序, 越往右边越大
NSLog(@"createdAtDate > nowDate");
} else if (result == NSOrderedDescending) { // 降序, 越往右边越小
NSLog(@"createdAtDate < nowDate");
} else {
NSLog(@"createdAtDate == nowDate");
}
} /**
* 日期元素 : 年月日时分秒
*/
void getComponentsOfDate3()
{
// 时间字符串
NSString *string = @"2015-11-20 09:10:05"; // 日期格式化类
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
// 设置日期格式(为了转换成功)
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // NSString * -> NSDate *
NSDate *date = [fmt dateFromString:string]; // 利用NSCalendar处理日期
NSCalendar *calendar = [NSCalendar currentCalendar]; NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *cmps = [calendar components:unit fromDate:date]; // NSLog(@"%zd %zd %zd", cmps.year, cmps.month, cmps.day);
NSLog(@"%@", cmps);
} /**
* 日期元素 : 年月日时分秒
*/
void getComponentsOfDate2()
{
// 时间字符串
NSString *string = @"2015-11-20 09:10:05"; // 日期格式化类
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
// 设置日期格式(为了转换成功)
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // NSString * -> NSDate *
NSDate *date = [fmt dateFromString:string]; // 利用NSCalendar处理日期
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
NSInteger hour = [calendar component:NSCalendarUnitHour fromDate:date];
NSInteger minute = [calendar component:NSCalendarUnitMinute fromDate:date]; NSLog(@"%zd %zd %zd", month, hour, minute);
} /**
* 日期元素 : 年月日时分秒
*/
void getComponentsOfDate()
{
// 时间字符串
NSString *string = @"2015-11-20 09:10:05"; NSString *month = [string substringWithRange:NSMakeRange(, )]; NSLog(@"%@", month);
} void date2string()
{
NSDate *date = [NSDate date]; NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy年MM月dd号 HH:mm:ss"; NSString *string = [fmt stringFromDate:date]; NSLog(@"----%@+++++", string); } void string2date4()
{
// 时间戳 : 从1970年1月1号 00:00:00开始走过的毫秒数 // 时间字符串 - 时间戳
NSString *string = @""; NSTimeInterval second = string.longLongValue / 1000.0; // 时间戳 -> NSDate *
NSDate *date = [NSDate dateWithTimeIntervalSince1970:second]; NSLog(@"%@", date);
} void string2date3()
{
// 时间字符串
NSString *string = @"Tue May 31 17:46:55 +0800 2011"; // 日期格式化类
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy";
// fmt.dateFormat = @"EEE MMM dd HH:mm:ss ZZZZ yyyy";
// 设置语言区域(因为这种时间是欧美常用时间)
fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; NSLog(@"%@", [fmt dateFromString:string]);
} void string2date2()
{
// 时间字符串
NSString *string = @"11月-20号/2015年 09-10:05秒"; // 日期格式化类
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"MM月-dd号/yyyy年 HH-mm:ss秒"; NSLog(@"%@", [fmt dateFromString:string]);
} void string2date()
{
// 时间字符串
NSString *string = @"2015-11-20 09:33:22"; // 日期格式化类
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
// 设置日期格式(为了转换成功)
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // NSString * -> NSDate *
NSDate *date = [fmt dateFromString:string]; NSString *newStr = [fmt stringFromDate:date]; NSLog(@"%@", date);
NSLog(@"%@", newStr); }

总结:

## NSDateFormatter的作用

- NSString \* -> NSDate *

```obj

- (nullable NSDate *)dateFromString:(NSString *)string;

```

- NSDate \* -> NSString *

```objc

- (NSString *)stringFromDate:(NSDate *)date;

```

## 常见的日期格式

- http://www.cnblogs.com/mailingfeng/archive/2011/07/28/2120422.html

## NSString \* -> NSDate *

- 2015-11-20 09:10:05

```objc

// 时间字符串

NSString *string = @"2015-11-20 09:10:05";

// 日期格式化类

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

// 设置日期格式(为了转换成功)

fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";

// NSString * -> NSDate *

NSDate *date = [fmt dateFromString:string];

NSLog(@"%@", date);

```

- 11月-20号/2015年 09-10:05秒

```objc

// 时间字符串

NSString *string = @"11月-20号/2015年 09-10:05秒";

// 日期格式化类

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

fmt.dateFormat = @"MM月-dd号/yyyy年 HH-mm:ss秒";

NSLog(@"%@", [fmt dateFromString:string]);

```

- Tue May 31 17:46:55 +0800 2011

```objc

// 时间字符串

NSString *string = @"Tue May 31 17:46:55 +0800 2011";

// 日期格式化类

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

fmt.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy";

// fmt.dateFormat = @"EEE MMM dd HH:mm:ss ZZZZ yyyy";

// 设置语言区域(因为这种时间是欧美常用时间)

fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

NSLog(@"%@", [fmt dateFromString:string]);

```

- 1745645645645

```objc

// 时间戳 : 从1970年1月1号 00:00:00开始走过的毫秒数

// 时间字符串 - 时间戳

NSString *string = @"1745645645645";

NSTimeInterval second = string.longLongValue / 1000.0;

// 时间戳 -> NSDate *

NSDate *date = [NSDate dateWithTimeIntervalSince1970:second];

NSLog(@"%@", date);

```

## NSCalendar的注意点

```objc

#define iOS(version) ([UIDevice currentDevice].systemVersion.doubleValue >= (version))

NSCalendar *calendar = nil;

if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {

calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];

} else {

calendar = [NSCalendar currentCalendar];

}

NSCalendar *calendar = nil;

if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {

calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];

} else {

calendar = [NSCalendar currentCalendar];

}

```

## NSDate \* -> NSString *

```objc

NSDate *date = [NSDate date];

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

fmt.dateFormat = @"yyyy年MM月dd号 HH:mm:ss";

NSString *string = [fmt stringFromDate:date];

```

## 获得日期元素

```objc

NSString *string = @"2015-11-20 09:10:05";

NSString *month = [string substringWithRange:NSMakeRange(5, 2)];

NSLog(@"%@", month);

```

```objc

// 时间字符串

NSString *string = @"2015-11-20 09:10:05";

// 日期格式化类

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

// 设置日期格式(为了转换成功)

fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";

// NSString * -> NSDate *

NSDate *date = [fmt dateFromString:string];

// 利用NSCalendar处理日期

NSCalendar *calendar = [NSCalendar currentCalendar];

NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];

NSInteger hour = [calendar component:NSCalendarUnitHour fromDate:date];

NSInteger minute = [calendar component:NSCalendarUnitMinute fromDate:date];

NSLog(@"%zd %zd %zd", month, hour, minute);

```

```objc

// 时间字符串

NSString *string = @"2015-11-20 09:10:05";

// 日期格式化类

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

// 设置日期格式(为了转换成功)

fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";

// NSString * -> NSDate *

NSDate *date = [fmt dateFromString:string];

// 利用NSCalendar处理日期

NSCalendar *calendar = [NSCalendar currentCalendar];

NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;

NSDateComponents *cmps = [calendar components:unit  fromDate:date];

//    NSLog(@"%zd %zd %zd", cmps.year, cmps.month, cmps.day);

NSLog(@"%@", cmps);

```

## 日期比较

```objc

// 时间字符串

NSString *createdAtString = @"2015-11-20 11:10:05";

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";

NSDate *createdAtDate = [fmt dateFromString:createdAtString];

// 手机当前时间

NSDate *nowDate = [NSDate date];

/**

NSComparisonResult的取值

NSOrderedAscending = -1L, // 升序, 越往右边越大

NSOrderedSame,  // 相等

NSOrderedDescending // 降序, 越往右边越小

*/

// 获得比较结果(谁大谁小)

NSComparisonResult result = [nowDate compare:createdAtDate];

if (result == NSOrderedAscending) { // 升序, 越往右边越大

NSLog(@"createdAtDate > nowDate");

} else if (result == NSOrderedDescending) { // 降序, 越往右边越小

NSLog(@"createdAtDate < nowDate");

} else {

NSLog(@"createdAtDate == nowDate");

}

```

```objc

// 时间字符串

NSString *createdAtString = @"2015-11-20 09:10:05";

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";

NSDate *createdAtDate = [fmt dateFromString:createdAtString];

// 手机当前时间

//    NSDate *nowDate = [NSDate date];

// 获得createdAtDate和nowDate的时间间隔(间隔多少秒)

//    NSTimeInterval interval = [nowDate timeIntervalSinceDate:createdAtDate];

NSTimeInterval interval = [createdAtDate timeIntervalSinceNow];

NSLog(@"%f", interval);

```

```objc

NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";

// 时间字符串

NSString *createdAtString = @"2015-11-01 09:10:05";

NSDate *createdAtDate = [fmt dateFromString:createdAtString];

// 其他时间

NSString *otherString = @"2015-10-31 08:56:45";

NSDate *otherDate = [fmt dateFromString:otherString];

// 获得NSCalendar

NSCalendar *calendar = nil;

if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {

calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];

} else {

#import <Foundation/Foundation.h>

//typedef enum {
// /** 图片 */
// XMGTopicTypePicture = 10,
// /** 段子 */
// XMGTopicTypeWord = 29,
// /** 声音 */
// XMGTopicTypeVoice = 31,
// /** 视频 */
// XMGTopicTypeVideo = 41,
//} XMGTopicType; typedef NS_ENUM(NSUInteger, XMGTopicType) {
/** 图片 */
XMGTopicTypePicture = ,
/** 段子 */
XMGTopicTypeWord = ,
/** 声音 */
XMGTopicTypeVoice = ,
/** 视频 */
XMGTopicTypeVideo =
}; @class XMGComment; @interface XMGTopic : NSObject
/** 用户的名字 */
@property (nonatomic, copy) NSString *name;
/** 用户的头像 */
@property (nonatomic, copy) NSString *profile_image;
/** 帖子的文字内容 */
@property (nonatomic, copy) NSString *text;
/** 帖子审核通过的时间 */
@property (nonatomic, copy) NSString *created_at;
/** 顶数量 */
@property (nonatomic, assign) NSInteger ding;
/** 踩数量 */
@property (nonatomic, assign) NSInteger cai;
/** 转发\分享数量 */
@property (nonatomic, assign) NSInteger repost;
/** 评论数量 */
@property (nonatomic, assign) NSInteger comment; /** 最热评论 */
@property (nonatomic, strong) XMGComment *top_cmt; /** 帖子类型 */
@property (nonatomic, assign) XMGTopicType type; @end
#import "XMGTopic.h"

@implementation XMGTopic
#pragma mark - 其他
static NSDateFormatter *fmt_;
static NSCalendar *calendar_;
/**
* 在第一次使用XMGTopic类时调用1次
*/
+ (void)initialize
{
fmt_ = [[NSDateFormatter alloc] init];
calendar_ = [NSCalendar calendar];
} - (NSString *)created_at
{
// 获得发帖日期
fmt_.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *createdAtDate = [fmt_ dateFromString:_created_at]; if (createdAtDate.isThisYear) { // 今年
if (createdAtDate.isToday) { // 今天
// 手机当前时间
NSDate *nowDate = [NSDate date];
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *cmps = [calendar_ components:unit fromDate:createdAtDate toDate:nowDate options:]; if (cmps.hour >= ) { // 时间间隔 >= 1小时
return [NSString stringWithFormat:@"%zd小时前", cmps.hour];
} else if (cmps.minute >= ) { // 1小时 > 时间间隔 >= 1分钟
return [NSString stringWithFormat:@"%zd分钟前", cmps.minute];
} else { // 1分钟 > 分钟
return @"刚刚";
}
} else if (createdAtDate.isYesterday) { // 昨天
fmt_.dateFormat = @"昨天 HH:mm:ss";
return [fmt_ stringFromDate:createdAtDate];
} else { // 其他
fmt_.dateFormat = @"MM-dd HH:mm:ss";
return [fmt_ stringFromDate:createdAtDate];
}
} else { // 非今年
return _created_at;
}
} @end

calendar = [NSCalendar currentCalendar];

}

// 获得日期之间的间隔

NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;

NSDateComponents *cmps = [calendar components:unit fromDate:createdAtDate toDate:otherDate options:0];

NSLog(@"%@", cmps);

```

例子:

ios开发处理服务器返回的时间字符串的更多相关文章

  1. iOS开发Swift篇—(三)字符串和数据类型

    iOS开发Swift篇—(三)字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容  let website = "http://www ...

  2. iOS开发之动画中的时间(概况)

    一.引言 在iOS开发中使用动画时,可以通过设置动画的duration.speed.begintime.offset属性,来设置动画的时长.速度.起始时间及起始偏移. 用一个简单的例子来说明各个参数的 ...

  3. 服务器返回的JSON字符串

    异步请求将type设为"json",或者利 用$.getJSON()方法获得服务器返回,那么就不需要eval()方法,因为这时候得到的结果已经是json对象

  4. iOS开发之动画中的时间

    概述 在动画中,我们会指定动画的持续时间.例如 scaleAnimation.duration = self.config.appearDuration 那么这个时间是怎么定义的呢?是指的绝对时间吗? ...

  5. IOS开发之——使用SBJson拼接Json字符串

    SBJson包的下载地址在上一篇文章中. 能够使用NSDictionary中的键值对来拼接Json数据,很方便,也能够进行嵌套,直接上代码: //開始拼接Json字符串 NSDictionary *d ...

  6. iOS 开发 右滑返回上一级控制器

    #import <objc/runtime.h> @interface UINavigationController (Transition)<UIGestureRecognizer ...

  7. iOS开发-NSDate获取当前时区时间

    NSDate Date默认显示的是格林尼治所在地的标准时间(GMT),转换为中国时区需要加上八个小时,针对与这个情况你可以直接在获取时间之后加上八个小时,也可以转换到当前时区,都很简单,代码参考如下: ...

  8. ajax 获取服务器返回的XML字符串

    前台 解析失败不会抛出任何异常, 只会返回一个给定的错误文档 let l = console.log let http = ajanuw.create({ uri: 'http://localhost ...

  9. 【ios开发】自定义Actionsheet实现时间选择器和省市区选择器

    最近的工程有一个个人资料页面,需要填写生日和地区的信息,需要自己定义个actionsheet. 但是到网上搜了一下都不太合适,只好自己研究研究,重写了一个.共享出来给大家用用,突然发现自己精神很高尚吗 ...

随机推荐

  1. popover弹出框

    <style> #view{width: 300px;height: 200px;border: 1px solid red;} </style> 以上是为了viewport更 ...

  2. Java Base64、HMAC、SHA1、MD5、AES DES 3DES加密算法

    ●  BASE64 严格地说,属于编码格式,而非加密算法    ●  MD5(Message Digest algorithm 5,信息摘要算法)    ●  SHA(Secure Hash Algo ...

  3. vue项目使用axios

    使用: npm install axios --save-dev 在main.js中import: 使用: (1):POST方式 let data= [{receiveAdd:receiveAddVa ...

  4. RFID的基本组织构成

    RFID技术由3大组件构成, 包括: 阅读器.天线.标签三大组件. 阅读器 为RFID系统最重要也是最复杂的一个组件.因其工作模式一般是主动向标签询问标识信息, 所以有时又被称为询问器(Interro ...

  5. telnet不是内部命令也不是外部命令

    转自:https://www.cnblogs.com/sishang/p/6600977.html 处理办法: 依次打开“开始”→“控制面板”→“打开或关闭Windows功能”,在打开的窗口处,寻找并 ...

  6. 洛谷 P1644 跳马问题

    P1644 跳马问题 题目背景 在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧…… 题目描述 中国象棋半张棋盘如图1所示.马自左下角(0,0)向右上角(m,n)跳.规定只能往右跳,不准 ...

  7. μC/OS中的任务就绪表

    为了便于对就绪表的查找,μC/OSII又定义了一个数据类型为INT8U的变量OSRdyGrp, 并使该变量的每一位都对应OSRdyTbl[ ]的一个任务组(即数组的一个元素),如果某任务组中 有任务就 ...

  8. jQuery的实现原理和核心

    1.jQuery的实现原理 1)jQuery采用的是构造函数模式进行开发的,jQuery是一个类 2)上面说的常用的方法(CSS.属性.筛选.事件.动画.文档处理)都是定义在jQuery.protot ...

  9. HibernateCRUD基础框架(3)-简单的和较为复杂的标准的CRUD API

    优点:简单的和基础的CRUD功能可以很快实现,可以说是比较的"标准化".维护起来也很容易. 缺点:性能没有保障.不支持特别复杂的CRUD. 可以适用的场景:小型Web项目 1.Cr ...

  10. python整除

    1.'/'除号与c不同,单个'/'是浮点除,两个除号'//'才是整除