#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. 转一篇对EJB理解的文章

    1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...

  2. JavaScript--模块化 JavaScript module designer

    module: 模块就是实现特定功能的一组方法.1.在首页的一个接口js;首先下载好require.js文件引入首页. <script src="require.js" da ...

  3. angular 子组件与父组件通讯

    1. 子组件app-sidebar.compnent.html (click)="goProject()"设置点击事件 <mat-list-item [routerLink] ...

  4. Vue的style与class

    1. style 可以通过 :style="{height:`${heightData.main}px`}" 实现样式的动态绑定, style绑定的是一个对象,多个样式时用“,”隔 ...

  5. C#创建子线程,子线程使用委托更新控件

    一.背景 由于在窗体程序中通过点击一个button按键后需要更新TreeView控件的内容,由于等待时间比较长,主程序无法一起在那边等待,需要去处理其它的事情,所以就需要创建新的子线程来处理.因为主线 ...

  6. Flume Sinks官网剖析(博主推荐)

    不多说,直接上干货! Flume Sources官网剖析(博主推荐) Flume Channels官网剖析(博主推荐) Flume Channel Selectors官网剖析(博主推荐) 一切来源于f ...

  7. rhel5安装 oracle10

    readhat 安装11gr2文档 需要注意的地方:必须关掉的 1,防火墙:2,SElinux . root 用户运行  setup  命令可关防火墙与SElinux 修改网络配置文件,一定要重启此文 ...

  8. COGS——C 908. 校园网 || 洛谷——P 2746 [USACO5.3]校园网Network of Schools

    http://www.cogs.pro/cogs/problem/problem.php?pid=908   ||  https://www.luogu.org/problem/show?pid=27 ...

  9. 微信支付v2开发(4) 交易通知

    本文介绍如何使用JS API支付时如何获得交易通知. 一.交易通知 用户在成功完成支付后,微信后台通知(POST)商户服务器(notify_url)支付结果.商户可以使用notify_url的通知结果 ...

  10. Javascript和jquery事件--阻止事件冒泡和阻止默认事件

    阻止冒泡和阻止默认事件—js和jq相同,jq的event是一个全局的变量 我们写代码的时候常用的都是事件冒泡,但是有的时候我们并不需要触发父元素的事件,而浏览器也有自己的默认行为(表单提交.超链接跳转 ...