C#学习—时间

在开发中,一涉及到时间,DateTime类就是是一定会想到的。datetime常用,但是对于本人更多的应用往往没有去学习和关注。今天就总结一下datetime的相关使用。(应该会不定期补充)

一、DateTime类

格式字符    关联属性/说明
d    ShortDatePattern
D    LongDatePattern
f    完整日期和时间(长日期和短时间)
F    FullDateTimePattern(长日期和长时间)
g    常规(短日期和短时间)
G    常规(短日期和长时间)
m    MMonthDayPattern
r    RRFC1123Pattern
s    使用当地时间的SortableDateTimePattern(基于ISO8601)
t    ShortTimePattern
T    LongTimePattern
u    UniversalSortableDateTimePattern用于显示通用时间的格式
U    使用通用时间的完整日期和时间(长日期和长时间)
y    YYearMonthPattern

自定义的格式可以通过使用(y,M,d,h,m,s,f,t)自由组合
yy 年份后两位
yyyy四位年份
MM月份两位(前边用零补)
MMM月份缩写
MMMM月份全写 
dd日期(用零补)
ddd 星期缩写  
dddd星期全写  
HH 24小时hh
12小时 mm 分钟  
ss 秒数
ff 两位数毫秒
fff 三位数毫秒
ffff 四位数毫秒

获取时间

    static void Main(string[] args)
        {
        	//HH:24小时 hh:12小时
            Console.WriteLine("yyyy-MM-dd HH:mm:ss:fff      " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"));
            Console.WriteLine("yyyy-MM-dd HH:mm:ss:ms       " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"));
            Console.WriteLine("y        " + DateTime.Now.ToString("y"));                    
            Console.WriteLine("dddd     "+DateTime.Now.ToString("dddd"));                 
            Console.WriteLine("dddd, MMMM dd yyyy       " + DateTime.Now.ToString("dddd, MMMM dd yyyy"));   
            Console.WriteLine("ddd, MMM d yy        " + DateTime.Now.ToString("ddd, MMM d yy"));        
            Console.WriteLine("dddd, MMMM dd        " + DateTime.Now.ToString("dddd, MMMM dd"));        
            Console.WriteLine("M/yy     " + DateTime.Now.ToString("M/yy"));                 
            Console.WriteLine("dd-MM-yy     " + DateTime.Now.ToString("dd-MM-yy"));
            Console.WriteLine();

            Console.WriteLine("ToString('t'):       "+DateTime.Now.ToString("t")); 
            Console.WriteLine("ToString('d'):       "+DateTime.Now.ToString("d"));
            Console.WriteLine("ToString('D'):       "+DateTime.Now.ToString("D"));
            Console.WriteLine("ToString('f'):       "+DateTime.Now.ToString("f"));
            Console.WriteLine("ToString('F'):       "+DateTime.Now.ToString("F"));
            Console.WriteLine("ToString('G'):       "+DateTime.Now.ToString("G"));
            Console.WriteLine("ToString('t'):       "+DateTime.Now.ToString("t"));
            Console.WriteLine("ToString('T'):       "+DateTime.Now.ToString("T"));
            Console.WriteLine("ToString('U'):       "+DateTime.Now.ToString("U"));
            Console.WriteLine("ToString('u'):       "+DateTime.Now.ToString("u"));
            Console.WriteLine("ToString('m'):       "+DateTime.Now.ToString("m"));
            Console.WriteLine("ToString('M'):       "+DateTime.Now.ToString("M"));
            Console.WriteLine("ToString('r'):       "+DateTime.Now.ToString("r"));
            Console.WriteLine("ToString('R'):       "+DateTime.Now.ToString("R"));
            Console.WriteLine("ToString('y'):       "+DateTime.Now.ToString("y"));
            Console.WriteLine("ToString('Y'):       "+DateTime.Now.ToString("Y"));
            Console.WriteLine("ToString('o'):       "+DateTime.Now.ToString("o"));
            Console.WriteLine("ToString('O'):       "+DateTime.Now.ToString("O"));
            Console.WriteLine("ToString('s'):       "+DateTime.Now.ToString("s"));

            Console.ReadKey();
        }

二、获取时间差  TimeSpan类

TimeSpan和DateTime都是Unity.System下的字段,DateTime表示的是时间点,TimeSpan表示的是时间段。

TimeSpan值包含了许多属性与方法,用于访问或处理一个TimeSpan值,其中的五个重载方法之一的结构 TimeSpan( int days, int hours, int minutes, int seconds )
下面的列表涵盖了其中的一部分方法及属性解释
Add:与另一个TimeSpan值相加。
Days:返回用天数计算的TimeSpan值。
Duration:获取TimeSpan的绝对值。
Hours:返回用小时计算的TimeSpan值
Milliseconds:返回用毫秒计算的TimeSpan值。
Minutes:返回用分钟计算的TimeSpan值。
Negate:返回当前实例的相反数。
Seconds:返回用秒计算的TimeSpan值。
Subtract:从中减去另一个TimeSpan值。
Ticks:返回TimeSpan值的tick数。
TotalDays:返回TimeSpan值表示的天数。
TotalHours:返回TimeSpan值表示的小时数。
TotalMilliseconds:返回TimeSpan值表示的毫秒数。
TotalMinutes:返回TimeSpan值表示的分钟数。
TotalSeconds:返回TimeSpan值表示的秒数。

例子:

//利用TimeSpan计算时间差
DateTime dt1 = order.CreateTime;//订单创建时间
TimeSpan ts = DateTime.Now.Subtract(dt1);
if (ts.TotalHours > 2) //判断是否大于2小时
{}

负数

上面是较晚的日期减较早的日期,所以各属性值为正数,如果是较早的日期减较晚的日期,则属性值为负数

ASP.NET 中,两个时间相减,得到一个 TimeSpan 实例,TimeSpan 有一些属性:Days、TotalDays、Hours、TotalHours、Minutes、TotalMinutes、Seconds、TotalSeconds、Ticks,注意没有 TotalTicks

举例说明
时间 1 是 2010-1-2 8:43:35;时间 2 是 2010-1-12 8:43:34。
用时间 2 减时间 1,得到一个 TimeSpan 实例。
那么时间 2 比时间 1 多 9 天 23 小时 59 分 59 秒。
那么,Days 就是 9,Hours 就是 23,Minutes 就是 59,Seconds 就是 59。
再来看 Ticks,Tick 是一个计时周期,表示一百纳秒,即一千万分之一秒,那么 Ticks 在这里表示总共相差多少个时间周期,即:9 * 24 * 3600 * 10000000 + 23 * 3600 * 10000000 +59 * 60 * 10000000 + 59 * 10000000 = 8639990000000。3600 是一小时的秒数。
TotalDays 就是把 Ticks 换算成日数,即:8639990000000 / (10000000 * 24 * 3600) = 9.99998842592593。
TotalHours 就是把 Ticks 换算成小时数,即:8639990000000 / (10000000 * 3600) = 239.999722222222。
TotalMinutes 就是把 Ticks 换算成分钟数,即:8639990000000 / (10000000 * 60) = 14399.9833333333。
TotalSeconds 就是把 Ticks 换算成秒数,即:8639990000000 / (10000000) = 863999。
以下提供一些常用的方法

//求离最近发表时间的函数
public string DateStringFromNow(DateTime dt)
{
    TimeSpan span = DateTime.Now - dt;
    if (span.TotalDays > 60){
        return dt.ToShortDateString();
    }
    else if ( span.TotalDays > 30 ){
        return "1个月前";
    }
    else if (span.TotalDays > 14){
        return "2周前";
    }
    else if (span.TotalDays > 7){
        return "1周前";
    }
    else if (span.TotalDays > 1){
        return string.Format("{0}天前", (int)Math.Floor(span.TotalDays));
    }
    else if (span.TotalHours > 1){
        return string.Format("{0}小时前", (int)Math.Floor(span.TotalHours));
    }
    else if (span.TotalMinutes > 1){
        return string.Format("{0}分钟前", (int)Math.Floor(span.TotalMinutes));
    }
    else if (span.TotalSeconds >= 1){
        return string.Format("{0}秒前", (int)Math.Floor(span.TotalSeconds));
    }
    else {
        return "1秒前";
    }
}

C#中使用TimeSpan计算两个时间的差值

//可以反加两个日期之间任何一个时间单位。
private string DateDiff(DateTime DateTime1, DateTime DateTime2)
{
    string dateDiff = null;
    TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
    TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
    TimeSpan ts = ts1.Subtract(ts2).Duration();
    dateDiff = ts.Days.ToString()+"天"+ ts.Hours.ToString()+"小时"+ ts.Minutes.ToString()+"分钟"+ ts.Seconds.ToString()+"秒";
    return dateDiff;
}

.TotalDays和.Days的区别(其他类同):
TimeSpan ts = Date1 - Date2;
double dDays = ts.TotalDays;//带小数的天数,比如1天12小时结果就是1.5
比如1天12小时结果就是1.5
int nDays = ts.Days;//整数天数,1天12小时或者1天20小时结果都是1

/// <summary>
/// 日期比较
/// </summary>
/// <param name="today">当前日期</param>
/// <param name="writeDate">输入日期</param>
/// <param name="n">比较天数</param>
/// <returns>大于天数返回true,小于返回false</returns>
private bool CompareDate(string today, string writeDate, int n)
{
    DateTime Today = Convert.ToDateTime(today);
    DateTime WriteDate = Convert.ToDateTime(writeDate);
    WriteDate = WriteDate.AddDays(n);
    if (Today>= WriteDate)
        return false;
    else
        return true;
}

三、时间戳

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

通俗的理解就是证明时间的可查证印章。比如我要拍照,如何证明时间呢,拍时钟显然不可能证明,我们可以通过拍摄新闻报纸和彩票开奖号码的方式证明。

第一种:

/// <summary>
/// 获取当前时间戳
/// </summary>
/// <returns></returns>
public string GetTimeStamp()
{
     TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
     return Convert.ToInt64(ts.TotalSeconds).ToString();
}

第二种:

/// <summary>  
/// 获取时间戳  
/// </summary>  
/// <returns></returns>  
public static string GetTimeStamp()
{
    TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
    return Convert.ToInt64(ts.TotalSeconds).ToString();
}

lua的获取时间戳:print(os.time())


Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中(比如Linux系统),也在许多其他操作系统中被广泛采用。

php中获取时间戳的方法是:time();Date();

Linux中获取时间戳的方法是:date +%s

Linux中将时间戳转换为日期: date -d "@<timestamp>"

>> C# DateTime转换为Unix时间戳

System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
long timeStamp = (long)(DateTime.Now - startTime).TotalSeconds; // 相差秒数
System.Console.WriteLine(timeStamp);

>> Unix时间戳转换为C# DateTime 

long unixTimeStamp = 1478162177;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
DateTime dt = startTime.AddSeconds(unixTimeStamp);
System.Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss:ffff"));

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值