时间戳转换成天十分秒_.NET Core采坑那一些事之系统时间/文件路径

(给DotNet加星标,提升.Net技能)

转自:程序员修炼之旅  cnblogs.com/xiaoXuZhi/p/netcoredatetime.html

前言

公司的新项目都是采用.NET Core来开发,在开发过程中,也踩到了一些坑,在此先总结两个坑,这两个坑都是关于Linux(CentOS)和windows下的兼容性问题。

4d04fbe8af906faff21e72318508bb82.png

4b7251146fbc4b84b9e2e5ef6f32482f.png

/// 
/// 获取系统当前时间
///
/// 系统当前时间
public static DateTime GetSysDateTimeNow(){
Instant now = SystemClock.Instance.GetCurrentInstant();
var shanghaiZone = DateTimeZoneProviders.Tzdb["Asia/Shanghai"];
return now.InZone(shanghaiZone).ToDateTimeUnspecified();
}

是不是so easy?

da424d85acda14150d3bbd0c37df2f04.png

我已经将源码上传到GitHub上,有兴趣的可以档下来

源码地址:https://github.com/xuyuanhong0902/XYH.Tools.git

源码:

/* ======================================
* 功能描述:所有时间的相关操作集合
* 创 建 者:程序修炼之旅 交流微信号:15908150902
* 创建日期: 2020-03-08
* CLR Version :1.0
* ==========================================*/
using NodaTime;
using System;

///
/// 公用帮助类
///
namespace XYH.Tools.DateTimeTools
{
///
/// 时间相关的操作类
///
public static class DateTimeTools
{
#region 获取系统当前时间的几个方法(返回时间+格式化后的时间字符串)
///
/// 获取系统当前时间
///
/// 系统当前时间
public static DateTime GetSysDateTimeNow(){
Instant now = SystemClock.Instance.GetCurrentInstant();
var shanghaiZone = DateTimeZoneProviders.Tzdb["Asia/Shanghai"];
return now.InZone(shanghaiZone).ToDateTimeUnspecified();
}

///
/// 获取系统当前时间格式化字符串 24小时制 被格式化为 (yyyy-MM-dd HH:mm:ss.fff)
///
/// 系统当前格式化的时间字符串(yyyy-MM-dd HH:mm:ss.fff)
public static string GetSysDateTimeNowStringYMD24HMSF(){
return GetSysDateTimeNow().ToStringYMD24HMSF();
}

///
/// 获取系统当前时间格式化字符串 12小时制 被格式化为 (yyyy-MM-dd hh:mm:ss.fff)
///
/// 系统当前格式化的时间字符串(yyyy-MM-dd hh:mm:ss.fff)
public static string GetSysDateTimeNowStringYMD12HMSF(this DateTime time){
return GetSysDateTimeNow().ToStringYMD12HMSF();
}

///
/// 获取系统当前时间格式化字符串 24小时制 被格式化为 (yyyy-MM-dd HH:mm:ss)

///
/// 系统当前格式化的时间字符串(yyyy-MM-dd HH:mm:ss)
public static string GetSysDateTimeNowStringYMD24HMS(this DateTime time){
return GetSysDateTimeNow().ToStringYMD24HMS();
}
///
/// 获取系统当前时间格式化字符串 12小时制 被格式化为 (yyyy-MM-dd hh:mm:ss)
///
/// 系统当前格式化的时间字符串(yyyy-MM-dd hh:mm:ss)
public static string GetSysDateTimeNowStringYMD12HMS(this DateTime time){
return GetSysDateTimeNow().ToStringYMD12HMS();
}
///
/// 获取系统当前时间格式化字符串 被格式化为 (yyyy-MM-dd)
///
/// 系统当前格式化的时间字符串(yyyy-MM-dd)
public static string GetSysDateTimeNowStringYMD(this DateTime time){
return GetSysDateTimeNow().ToStringYMD();
}
#endregion

#region DateTime 扩展几个 格式方法
///
/// 时间 格式化 24小时制 被格式化为 (yyyy-MM-dd HH:mm:ss.fff)
///
/// 被格式的时间
/// 格式化后的时间字符串(yyyy-MM-dd HH:mm:ss.fff)
public static string ToStringYMD24HMSF(this DateTime time){
return time.ToString("yyyy-MM-dd HH:mm:ss.fff");
}
///
/// 时间 格式化 12小时制 被格式化为 (yyyy-MM-dd hh:mm:ss.fff)
///
/// 被格式化时间
/// 格式化后的时间字符串(yyyy-MM-dd hh:mm:ss.fff)
public static string ToStringYMD12HMSF(this DateTime time){
return time.ToString("yyyy-MM-dd hh:mm:ss.fff");
}
///
/// 时间 格式化 24小时制 被格式化为 (yyyy-MM-dd HH:mm:ss)
///
/// 被格式化时间
/// 格式化后的时间字符串(yyyy-MM-dd HH:mm:ss)
public static string ToStringYMD24HMS(this DateTime time){
return time.ToString("yyyy-MM-dd HH:mm:ss");
}

///
/// 时间 格式化 12小时制 被格式化为 (yyyy-MM-dd hh:mm:ss)
///
/// 被格式化时间
/// 格式化后的时间字符串(yyyy-MM-dd hh:mm:ss)
public static string ToStringYMD12HMS(this DateTime time){
return time.ToString("yyyy-MM-dd hh:mm:ss");
}

///
/// 时间 格式化 被格式化为 (yyyy-MM-dd)
///
/// 被格式化时间
/// 格式化后的时间字符串(yyyy-MM-dd)
public static string ToStringYMD(this DateTime time){
return time.ToString("yyyy-MM-dd");
}
#endregion


#region 获取时间戳
///
/// 获取时间戳(秒)
///
/// 秒时间戳
public static long GetSecondTimestamp(){
// 以1970-1-1 为时间开始 同系统当前时间的秒差值即为秒时间戳
TimeSpan ts = GetSysDateTimeNow() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds);
}
///
/// 获取时间戳(毫秒)
///
/// 毫秒时间戳
public static long GetMilliSecondTimestamp(){
// 以1970-1-1 为时间开始 同系统当前时间的毫秒差值即为毫秒时间戳
TimeSpan ts = GetSysDateTimeNow() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalMilliseconds);
}
#endregion

#region 将一个时间戳转换为一个时间
///
/// 将一个秒时间戳转换为时间格式(秒)
///
/// 秒时间戳
/// 转换后的时间
public static DateTime? SecondStampToDateTime(long secondTimestamp)
{
// 做一个简单的判断
if (secondTimestamp <= 0)
{
return null;
}
// 以1970-1-1 为时间开始,通过计算与之的时间差,来计算其对应的时间
DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddSeconds(secondTimestamp).ToLocalTime();
return dateTime;
}

///
/// 将一个字符串秒时间戳转换为时间格式(秒)
///
/// 字符串秒时间戳
/// 转换后的时间
public static DateTime? SecondStampToDateTime(string secondTimestampStr)
{
// 如果为空,那么直接返回null
if (string.IsNullOrEmpty(secondTimestampStr))
{
return null;
}
// 首先将字符串时间戳转换为数字
long secondTimestamp = 0;
long.TryParse(secondTimestampStr, out secondTimestamp);
// 调用
return SecondStampToDateTime(secondTimestamp);
}
///
/// 将一个字符串毫秒时间戳转换为时间格式(毫秒)
///
/// 字符串毫秒时间戳
/// 转换后的时间
public static DateTime? MilliSecondStampToDateTime(long secondTimestamp)
{
// 做一个简单的判断
if (secondTimestamp <= 0)
{
return null;
}
// 以1970-1-1 为时间开始,通过计算与之的时间差,来计算其对应的时间
DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddMilliseconds(secondTimestamp).ToLocalTime();
return dateTime;
}

///
/// 将一个毫秒时间戳转换为时间格式(毫秒)
///
/// 毫秒时间戳
/// 转换后的时间
public static DateTime? MilliSecondStampToDateTime(string milliSecondStampStr)
{
// 如果为空,那么直接返回null
if (string.IsNullOrEmpty(milliSecondStampStr))
{
return null;
}
// 首先将字符串时间戳转换为数字
long milliSecondStamp = 0;
long.TryParse(milliSecondStampStr, out milliSecondStamp);
// 调用
return MilliSecondStampToDateTime(milliSecondStamp);
}
#endregion
}
}

c3dd1fd3fccb760836b7ad8d9232e06d.png

我们以后在写.NET程序的时候,无论是否会采用.NET Core实现linux系统部署,我们都也该想到不同系统的兼容性问题,在实现上都采用一个通用的方式来实现,那么以后在做项目升级,系统迁移的时候,就会少一些麻烦。嘿嘿,今天就先到这,后续我在分享一下其它.NET Core实战所踩的坑。

推荐阅读   点击标题可跳转 分享一个基于.NET Core 3.1开发的模块化项目 一个轻量级的基于.NET Core的ORM框架HSQL C#开发PDF阅读器初探

看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

bcde79259a251dcfcd90bd9dcc58c5c7.png

好文章,我在看❤️

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值