supersr--时间显示逻辑-->NSDate+NSCalendar
一种:时间逻辑:
- (NSString *)created_at{
// 从后台返回的字符串格式:Mon Aug 03 09:17:31 +0800 2014,
//NSDateFormatter可以把NSDate转成字符串,也可以把字符串转成NSDate
//初始化一个时间格式化器
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//指定时间格式化字符串-->是一个什么样的格式
formatter.dateFormat = @"EEE MMM dd HH:mm:ss z yyyy";
// formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
//如果是真机,一定要指定个这locale,标明这个时间是什么样标识
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
//当前w创建的时间
NSDate *createDate = [formatter dateFromString:_created_at];
// //取出当前时间
NSDate *currentDate = [NSDate date];
//拿着当前时间与create_at进行一个对比
// if (是今年) {
if ([self isThisYearWithDate:createDate]) {
//是同一年
//判断是否是今天
if ([self isTodayWithDate:createDate]) {
//是今天
//如果创建时间加上60秒,大于当前时间,代表1分钟之内
NSDate *resultDate = [createDate dateByAddingTimeInterval:60];
if ([resultDate compare:currentDate] == NSOrderedDescending) {
//代表是1分钟之内
return @"刚刚";
}else{
//判断1小时之内
resultDate = [createDate dateByAddingTimeInterval:3600];
if ([resultDate compare:currentDate] == NSOrderedDescending) {
//代表1小时之内
//计算多少分钟前
NSTimeInterval interval = [currentDate timeIntervalSinceDate:createDate];
//分钟数
NSInteger intervalMinute = interval/60;
return [NSString stringWithFormat:@"%zd分钟前",intervalMinute];
}else{
//几小时前
NSTimeInterval interval = [currentDate timeIntervalSinceDate:createDate];
//分钟数
NSInteger intervalMinute = interval/3600;
return [NSString stringWithFormat:@"%zd小时前",intervalMinute];
}
}
//是不是1分钟之内
//是不是1小时之内
}else{
//如果是昨天-->昨天 11:11
if ([self isYesterdayWithDate:createDate]) {
//不是今天先这么去显示:08-01 15-03
formatter.dateFormat = @"昨天 HH:mm";
return [formatter stringFromDate:createDate];
}else{
//不是今天先这么去显示:08-01 15-03
formatter.dateFormat = @"MM-dd HH:mm";
return [formatter stringFromDate:createDate];
}
}
}else{
//不是今年:2014-05-05 09:17:31
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
return [formatter stringFromDate:createDate];
}
}
/**
* 是否是与当前时间是同一年
*
* @param date 传入对比的时间
*
* @return <#return value description#>
*/
- (BOOL)isThisYearWithDate:(NSDate *)date{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy";
//当前w创建的时间
NSDate *createDate = date;
//取出当前时间
NSDate *currentDate = [NSDate date];
//拿着创建时间与当前时间进行对比-->只格式化年份
formatter.dateFormat = @"yyyy";
//取出年份-->判断是否同一年,只要拿着年份进行对比一下,看一下是否一样
NSString *createDateYearStr = [formatter stringFromDate:createDate];
NSString *currentDateYearStr = [formatter stringFromDate:currentDate];
//对比年份的时间字符串,如果不是同一年的话返回NO
return [createDateYearStr isEqualToString:currentDateYearStr];
}
/**
* 判断与今天否是同一天,是否是今天
*
* @param date
*
* @return
*/
- (BOOL)isTodayWithDate:(NSDate *)date{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//拿着创建时间与当前时间进行对比-->只格式化年份-月份-天
formatter.dateFormat = @"yyyy-MM-dd";
//当前wei创建的时间
NSDate *createDate = date;
//取出当前时间
NSDate *currentDate = [NSDate date];
//取出年份-->判断是否是今天,
NSString *createDateYearStr = [formatter stringFromDate:createDate];
NSString *currentDateYearStr = [formatter stringFromDate:currentDate];
//对比年份的时间字符串,如果不是同一年的话返回NO
return [createDateYearStr isEqualToString:currentDateYearStr];
}
/**
* 与当前时间对比,判断是否是昨天
*
* @param date <#date description#>
*
* @return <#return value description#>
*/
- (BOOL)isYesterdayWithDate:(NSDate *)date{
//2014-09-30 10:00:00 创建时间
//2014-10-01 09:00:00 当前
NSDate *currentDate = [NSDate date];
//取出当前日历对象
NSCalendar *canlendar = [NSCalendar currentCalendar];
//NSCalendarUnit 对比单位-->要对比些什么东西
//设置对比对象
NSCalendarUnit unit = NSCalendarUnitYear|NSCalendarUnitDay|NSCalendarUnitMonth|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
//时间比较的结果
NSDateComponents *components = [canlendar components:unit fromDate:date toDate:currentDate options:NSCalendarWrapComponents];
//对比两个时间的day差值是否为
// NSLog(@"day=%zd,hour=%zd,minute=%zd,second=%zd",components.day,components.hour,components.minute,components.second);
return components.day == 1;
}
二种方式:
//重写time的getter 方法
// 1 判断addtime和当前的时间差
//如果时间差小于60分钟 返回 n分钟前
//如果超过60分钟 小于24小时 返回n小时前
//如果超过24小时 返回 月-日
- (NSString *)time{
//把json中的数字时间 转换成日期对象
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[self.addtime intValue]];
//计算date和当前的时间差
NSCalendar *calendar = [NSCalendar currentCalendar];
//获取两个时间相差的分钟
NSDateComponents *component = [calendar components:NSCalendarUnitMinute fromDate:date toDate:[NSDate date] options:0];
if (component.minute < 60) {
return [NSString stringWithFormat:@"%zd分钟前",component.minute];
}
//判断相差的小时
component = [calendar components:NSCalendarUnitHour fromDate:date toDate:[NSDate date] options:0];
if (component.hour < 24) {
return [NSString stringWithFormat:@"%zd小时前",component.hour];
}
//
NSDateFormatter *ndf = [NSDateFormatter new];
ndf.dateFormat = @"MM-dd";
return [ndf stringFromDate:date];
}
supersr--时间显示逻辑-->NSDate+NSCalendar的更多相关文章
- OC - 时间日期类NSDate
OC - 时间日期类NSDate //NSDate 时间日期类 NSDate 二进制数据流 { //1.获取当前时间 零时区的时间 //显示的是格林尼治的时间: 年-月-日 时:分:秒:+时区 NSD ...
- Foundation框架—时间处理对象NSDate
NSDate类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差(Time Interval)运算和日期之间的早晚比较等. 1. NSDate的构造方法和构造获取实例的属性 用于创建NSDat ...
- js获取当前时间显示在页面上
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- jsp界面动态时间显示
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- PHP比较全的友好的时间显示,比如‘刚刚’,'几秒前'等
分享一个php友好的比较完成的时间格式化函数,包括‘刚刚’,'几秒之前',‘几分钟前’,'几小时前',几天前,几周前,几个月前等.调用方式很简单,是从ThinkSNS 里面拿出来的. /** * 友好 ...
- 将时间显示为“刚刚”“n分钟/小时前”等
在很多场合为了显示出信息的及时性,一般会将时间显示成“刚刚”,“5分钟前”,“3小时前”等,而不是直接将时间打印出来.比如微博,SNS类应用就最长用到这个功能.而一般存储在数据库中的时间格式为 Uni ...
- phpcms v9 搜索结果列表页时间显示1970问题解决方案
对于喜欢用phpcms v9 的小伙伴来说,在调用时间时,总会出现时间1970这样的问题,对于这个问题,网上的说法很多,内容页时间显示通常不会问题,搜索结果页就不行了,通过总结,发现使用{format ...
- 电脑时间显示秒 win10电脑显示农历
win10电脑时间显示秒 显示农历. Win10怎样让任务栏时间显示秒_百度经验 win10电脑显示农历 网上搜到的不管用. 直接下载win10万年历.我下载的人生日历. 最烦广告, 还有一些流氓行为 ...
- GUI带有右键菜单,带有时间显示的
%带有右键菜单的GUI figure('Menubar','none'); h = uicontextmenu; uimenu(h,'Label','A'); uimenu(h,'Label','B' ...
随机推荐
- 【PHP面向对象(OOP)编程入门教程】8.构造方法__construct()与析构方法__destruct()
大多数类都有一种称为构造函数的特殊方法.当创建一个对象时,它将自动调用构造函数,也就是使用new这个关键字来实例化对象的时候自动调用构造方法.构 造函数的声明与其它操作的声明一样,只是其名称必须是__ ...
- Swift3.0P1 语法指南——字符串与字符
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
- json不转化值是null的字段
今天写东西,发现JSONObject.fromObject(),方法,会把value是null的字段,转为0或"",就自己写了一个方法,如果value是null就不转换 packa ...
- Android 网络请求框架android-async-http问题
今天通过接口请求服务器的一些app数据,发现一个很奇怪的问题,请求一个链接的时候,通常在第一次请求发起的时候没有什么问题,能很快的拿到数据,但是 往后再去请求的时候就会等待很久,而且最后会请求失败,一 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之三
五.睡眠和唤醒一个线程 有时,你会想要在一段特定的时间后再去中断线程的运行.举个例子,程序中的一个线程每一分钟检查一次传感器的状态,剩余的时间,线程应该处于空闲的状态.在这段空闲时间里,线程不会使用计 ...
- BZOJ2843——极地旅行社
1.题目大意:动态树问题,点修改,链查询.另外说明双倍经验题=bzoj1180 2.分析:lct模板题,练手的 #include <stack> #include <cstdio&g ...
- [KOJ95603]全球奥运
[COJ95603]全球奥运 试题描述 一个环形的图中有N个城市,奥运会重要项目就是传递圣火,每个城市有A[i]个圣火,每个城市可以向它相邻的城市传递圣火(其中1号城市可以传递圣火到N号城市或2号城市 ...
- Laravel 5.1 文档攻略 —— Eloquent Collection
简介 像all()和get(),还有一些处理模型关系这种会返回多条数据的方法,在Eloquent里面会返回一个collection对象集合(对象装在对象里),而不是像DQB的数组结果集合(对象装在数组 ...
- 怎样将runlmbench 获取的数值传给上层app
前面那个随笔 , 已经成功将runlmbench 移植到了Android , 并成功的运行. 今天就写一下将runlmbench 获取的那些性能值传给上层 App 进行人机交互. 一开始 , 我是想直 ...
- 2016年11月14日--SQL创建数据库、表-查、插、删、改
--创建数据库(create database 数据库名)create database hq20161114go --使用选择数据库(use 数据库名)use hq20161114go --创建学生 ...