C#-返回相对时间函数
在公司一直做前端,经理叫我写一个后端函数,要求是:
参数:DateTime--传入任意时间类型
返回:string --返回传入参数时间与当前时间的相对时间字符串,如:3天前,1小时前,5分钟前。
注意判断,返回值最大单位是年,如果传入的时间与当前时间相差小于一年,则返回"x个月前",如果小于一个月,返回"x天前",小于1天,那就返回“x小时前”,如果小于1小时,返回“x分钟前”,如小于1分钟,则返回“x秒前”.... 以此类推至毫秒
然后我上网查了资料,资料很多,主要用了TimeSpan来计算时间间隔,TimeSpan可以只计算天、小时、分钟、秒、毫秒
TimeSpan ts = currentDate - dynamicTime;(当前时间-需要计算的时间)
ts.Days ts.Hours ts.Minutes ts.Seconds ts.Milliseconds 分别表示计算时间距离现在有x天x小时x分钟x秒x毫秒。
区别于
TotalDays:返回TimeSpan值表示的天数。
TotalHours:返回TimeSpan值表示的小时数。
TotalMinutes:返回TimeSpan值表示的分钟数。
TotalSeconds:返回TimeSpan值表示的秒数。
TotalMilliseconds:返回TimeSpan值表示的毫秒数。
假如我们求的时间是: 2018-9-30 08:30:30 - 2018-9-29 07: 30:29。用第一组的结果是 1天 1小时 0 分钟 1秒 。第二组的结果就是1.xxx天 或者25.xxx小时(xxx是小数,我的数学比较差).第一组如果时间不存在就为0,跳到下一个单位去计算。于是我用这个特性进行非0判断。如果ts.day(天数)为0。那么相距时间不会超过一天,就直接报出是几分钟前。而后的秒,毫秒不用理会。要求就是如此。如果ts.hours也为0。时间就不会超过1小时。直接看ts.minues距离几分钟。同理。。。。
但当时我想到个问题。求年、月份时,要考虑28,29,30,31号的情况。问了经理,他直接给我一串求年份和月份的代码。
DateTime currentDate = DateTime.Now;
DateTime dynamicTime = Convert.ToDateTime("2017-9-5");
int year = currentDate.Year - dynamicTime.Year; //相差的年份
int month = (currentDate.Year - dynamicTime.Year) * 12 + (currentDate.Month - dynamicTime.Month); //相差的月份
以上代码我就直接拿来用。但是其中它所求的年份是只要跨年了,即使没满12个月都算做一年。我们要求过了12个月才能算“一年前”。于是我做了如下修改,经理让我封装成函数。我不知道封装是什么。别人告诉我是接收参数,然后有个返回值。这就叫封装,我大学没学好/(ㄒoㄒ)/~~。下面是完整代码,写在控制台里。主要是else if语法和TimeSpan方法的使用。有些我没有完全明白。希望大家看到多指正我的问题,谢谢啦~ o(* ̄▽ ̄*)o
using System;
namespace time
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
string str = "";
DateTime dynamicTime = Convert.ToDateTime("2018/9/29 15:16:00 ");
str =p.GetIntervalTime(dynamicTime); //
Console.WriteLine(str);
}
public string GetIntervalTime(DateTime dynamicTime)
{
DateTime currentDate = DateTime.Now; //获取当前时间
TimeSpan ts = currentDate - dynamicTime; //使用TimeSpan 其中ts是当前时间减去待计算时间的值
int month = (currentDate.Year - dynamicTime.Year) * 12 + (currentDate.Month - dynamicTime.Month); //求月份,这里还没仔细推敲,就拿来用
string en = ""; //定义返回字符串
if (month >= 12)
{
int year = month / 12; //如果月份大于等于12个月。则除以12求出多少年。
en = year + "年前";
}
else if (month > 0)
{
en = month + "个月前"; //利用else if语法。这里主要也是else if语法,如果mouth小于12个月并且大于0 ,则报出 n 个月前
}
else if (ts.Days != 0)
{
en = ts.Days + "天前"; //如果month小于等于0且Day不等于0,则报出多少天前。
}
else if (ts.Hours != 0)
{
en = ts.Hours + "小时前";
}
else if (ts.Minutes != 0)
{
en = ts.Minutes + "分钟前";
}
else if (ts.Seconds != 0)
{
en = ts.Seconds + "秒前";
}
else
{
en = ts.Milliseconds + "毫秒前";
}
return en;
}
}
}
C#-返回相对时间函数的更多相关文章
- mysql中返回当前时间的函数或者常量
引用:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html 1.1 获得当前日期+时间(date + time)函数:now() 除了 now() ...
- C++中的时间函数
C++获取时间函数众多,何时该用什么函数,拿到的是什么时间?该怎么用?很多人都会混淆. 本文是本人经历了几款游戏客户端和服务器开发后,对游戏中时间获取的一点总结. 最早学习游戏客户端时,为了获取最精确 ...
- Linux C++中的时间函数(转)
http://net.pku.edu.cn/~yhf/linux_c/function/03.html asctime(将时间和日期以字符串格式表示) 相关函数 time,ctime,gmtime ...
- Sql Server函数全解(四)日期和时间函数
日期和时间函数主要用来处理日期和时间值,本篇主要介绍各种日期和时间函数的功能和用法,一般的日期函数除了使用date类型的参数外,也可以使用datetime类型的参数,但会忽略这些值的时间部分.相同 ...
- Oracle内置函数:时间函数,转换函数,字符串函数,数值函数,替换函数
dual单行单列的隐藏表,看不见 但是可以用,经常用来调内置函数.不用新建表 时间函数 sysdate 系统当前时间 add_months 作用:对日期的月份进行加减 写法:add_months(日期 ...
- C库函数使用与总结之时间函数
1. localtime(取得当地目前时间和日期) [头文件]#include <time.h> [函数原型]struct tm *localtime(const time_t * tim ...
- MySQL数据库9 - 日期与时间函数
一 日期和时间函数 函数的概念:按指定格式输入参数,返回正确结果的运算单元 1. 返回当前日期:curdate() current_date() current_date()+0可以将当前日期转换为数 ...
- MySQL日期时间函数大全 转
DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)mysql> select DAYOFWEEK('1998-02-03'); ...
- Oracle日期时间函数大全
ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 显示值:07 yyy three digits ...
随机推荐
- 【AngularJS学习笔记】Java Script "use strict" 严格模式
---恢复内容开始--- 学习Angular的时候,发现好多优秀的源码中,JS文件的最上面,都会写上"use strict"; 这几个字符,搜了一下,找到一篇比较不错的文章,抄过来 ...
- 阿贾克斯(AJAX)
AJAX :Asynchronous JavaScript and XML 异步的javascript 和xml 优点 : 在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分数据 不需要 ...
- type和 #define
1.#define INT8U unsigned char : 用INT8U代替unsigned char 2.typedef typedef int size; 此声明定义了一个int的同义字 ...
- 用IntelliJ IDEA 配置Maven并部署Maven工程到Tomcat(Windows中)
近几天做一个新项目才接触Intellij IDEA 1.在官网下载了maven 解压并新建一个本地仓库文件夹 2.配置本地仓库路径 3.配置maven环境变量 4.在IntelliJ IDEA中配置m ...
- Eclipse新导入的项目中ctrl+点击指定方法名或类名没有反应,不能跳转问题
项目没有转成java项目 解决方法:右击项目名---选择properties----点击Project Facets,这样就可以实现ctrl+左键点击跳转了. 转成java项目后会报错 解决办法:选中 ...
- OS--lab0+lab1+lab4+lab5+lab6+lab7
URL:https://github.com/Chasssser/MytestOR(Linux) git clone https://github.com/Chasssser/Mytest
- MySQL学习之事务安全
事务安全 事务概念 事务(transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit),事务通常由高级数据操纵语言或编程语言 书写的用户程序的执行所引起.事务有事务开始(b ...
- youku客户端
文件结构 config import os IP_PORT = ('127.0.0.1',8080) BASE_DIR = os.path.dirname(os.path.dirname(__file ...
- 浅析MySQL主从复制技术(异步复制、同步复制、半同步复制)
Preface As we all know,there're three kinds of replication in MySQL nowadays.Such as,asynchr ...
- SQL Server 2012 - 多表连接查询
-- 交叉连接产生笛卡尔值 (X*Y) SELECT * FROM Student cross Join dbo.ClassInfo --另外一种写法 SELECT * FROM Student , ...