開源 - Ideal庫 - 常用時間轉換擴充套件方法(一)

IT规划师發表於2024-11-07

從事軟體開發這麼多年,平時也積累了一些方便自己快速開發的幫助類,一直在想著以什麼方式分享出來,因此有了這個系列文章,後面我將以《開源-Ideal庫》系列文章分享一些我認為比較成熟、比較方便、比較好的程式碼,如果感覺有借鑑的地方可以整合到自己的公共程式碼庫中,同時我也會以Nuget包的方式釋出出來,以供直接下載使用。

主要包括:公共、文件、ORM、SqlSugar、定時任務、Redis、Mqtt、SignalR等庫封裝,後面可能還會適當刪減。

今天我們將分享公共庫中關於時間轉換的相關封裝,主要是關於本地與UTC的日期、時間與時間戳和字串之間的相互轉換。

01、日期時間轉時間戳(秒)

該方法是把日期時間DateTime轉成10位時間戳,即秒級時間戳,程式碼如下:

/// <summary>
/// 日期時間轉時間戳(秒)
/// </summary>
/// <param name="dateTime">日期時間</param>
/// <returns>時間戳(秒)</returns>
public static long ToUnixTimestampBySeconds(this DateTime dateTime)
{
    var dto = new DateTimeOffset(dateTime);
    return dto.ToUnixTimeSeconds();
}

02、日期時間轉時間戳(毫秒)

該方法是把日期時間DateTime轉為13位時間戳,即毫秒級時間戳,程式碼如下:

/// <summary>
/// 日期時間轉時間戳(毫秒)
/// </summary> 
/// <param name="dateTime">日期時間</param>
/// <returns>時間戳(毫秒)</returns>
public static long ToUnixTimestampByMilliseconds(this DateTime dateTime)
{
    var dto = new DateTimeOffset(dateTime);
    return dto.ToUnixTimeMilliseconds();
}

03、時間戳(秒)轉本地日期時間

該方法是把10位秒級時間戳轉為本地日期時間DateTime,程式碼如下:

/// <summary>
/// 時間戳(秒)轉本地日期時間
/// </summary>
/// <param name="timestamp">時間戳(秒)</param>
/// <returns>本地日期時間</returns>
public static DateTime ToLocalTimeDateTimeBySeconds(this long timestamp)
{
    var dto = DateTimeOffset.FromUnixTimeSeconds(timestamp);
    return dto.ToLocalTime().DateTime;
}

04、時間戳(毫秒)轉本地日期時間

該方法是把13位毫秒級時間戳轉為本地日期時間DateTime,程式碼如下:

/// <summary>
/// 時間戳(毫秒)轉本地日期時間
/// </summary> 
/// <param name="timestamp">時間戳(毫秒)</param>
/// <returns>本地日期時間</returns>
public static DateTime ToLocalTimeDateTimeByMilliseconds(this long timestamp)
{
    var dto = DateTimeOffset.FromUnixTimeMilliseconds(timestamp);
    return dto.ToLocalTime().DateTime;
}

05、時間戳(秒)轉UTC日期時間

該方法是把10位秒級時間戳轉為UTC日期時間DateTime,程式碼如下:

/// <summary>
/// 時間戳(秒)轉UTC日期時間
/// </summary> 
/// <param name="timestamp">時間戳(秒)</param>
/// <returns>UTC日期時間</returns>
public static DateTime ToUniversalTimeDateTimeBySeconds(this long timestamp)
{
    var dto = DateTimeOffset.FromUnixTimeSeconds(timestamp);
    return dto.ToUniversalTime().DateTime;
}

06、時間戳(毫秒)轉UTC日期時間

該方法是把13位毫秒級時間戳轉為UTC日期時間DateTime,程式碼如下:

/// <summary>
/// 時間戳(毫秒)轉UTC日期時間
/// </summary> 
/// <param name="timestamp">時間戳(毫秒)</param>
/// <returns>UTC日期時間</returns>
public static DateTime ToUniversalTimeDateTimeByMilliseconds(this long timestamp)
{
    var dto = DateTimeOffset.FromUnixTimeMilliseconds(timestamp);
    return dto.ToUniversalTime().DateTime;
}

07、時間戳(秒)轉本地日期

該方法是把10位秒級時間戳轉為本地日期DateOnly,程式碼如下:

/// <summary>
/// 時間戳(秒)轉本地日期
/// </summary> 
/// <param name="timestamp">時間戳(秒)</param>
/// <returns>本地日期</returns>
public static DateOnly ToLocalTimeDateBySeconds(this long timestamp)
{
    var dt = timestamp.ToLocalTimeDateTimeBySeconds();
    return DateOnly.FromDateTime(dt);
}

08、時間戳(毫秒)轉本地日期

該方法是把13位毫秒級時間戳轉為本地日期DateOnly,程式碼如下:

/// <summary>
/// 時間戳(毫秒)轉本地日期
/// </summary> 
/// <param name="timestamp">時間戳(毫秒)</param>
/// <returns>本地日期</returns>
public static DateOnly ToLocalTimeDateByMilliseconds(this long timestamp)
{
    var dt = timestamp.ToLocalTimeDateTimeByMilliseconds();
    return DateOnly.FromDateTime(dt);
}

09、時間戳(秒)轉UTC日期

該方法是把10位秒級時間戳轉為UTC日期DateOnly,程式碼如下:

/// <summary>
/// 時間戳(秒)轉UTC日期
/// </summary> 
/// <param name="timestamp">時間戳(秒)</param>
/// <returns>UTC日期</returns>
public static DateOnly ToUniversalTimeDateBySeconds(this long timestamp)
{
    var dt = timestamp.ToUniversalTimeDateTimeBySeconds();
    return DateOnly.FromDateTime(dt);
}

10、時間戳(毫秒)轉UTC日期

該方法是把13位毫秒級時間戳轉為UTC日期DateOnly,程式碼如下:

/// <summary>
/// 時間戳(毫秒)轉UTC日期
/// </summary> 
/// <param name="timestamp">時間戳(毫秒)</param>
/// <returns>UTC日期</returns>
public static DateOnly ToUniversalTimeDateByMilliseconds(this long timestamp)
{
    var dt = timestamp.ToUniversalTimeDateTimeByMilliseconds();
    return DateOnly.FromDateTime(dt);
}

11、時間戳(秒)轉本地時間

該方法是把10位秒級時間戳轉為本地時間TimeOnly,程式碼如下:

/// <summary>
/// 時間戳(秒)轉本地時間
/// </summary> 
/// <param name="timestamp">時間戳(秒)</param>
/// <returns>本地時間</returns>
public static TimeOnly ToLocalTimeTimeBySeconds(this long timestamp)
{
    var dt = timestamp.ToLocalTimeDateTimeBySeconds();
    return TimeOnly.FromDateTime(dt);
}

12、時間戳(毫秒)轉本地時間

該方法是把13位毫秒級時間戳轉為本地時間TimeOnly,程式碼如下:

/// <summary>
/// 時間戳(毫秒)轉本地時間
/// </summary> 
/// <param name="timestamp">時間戳(毫秒)</param>
/// <returns>本地時間</returns>
public static TimeOnly ToLocalTimeTimeByMilliseconds(this long timestamp)
{
    var dt = timestamp.ToLocalTimeDateTimeByMilliseconds();
    return TimeOnly.FromDateTime(dt);
}

13、時間戳(秒)轉UTC時間

該方法是把10位秒級時間戳轉為UTC時間TimeOnly,程式碼如下:

/// <summary>
/// 時間戳(秒)轉UTC時間
/// </summary> 
/// <param name="timestamp">時間戳(秒)</param>
/// <returns>UTC時間</returns>
public static TimeOnly ToUniversalTimeTimeBySeconds(this long timestamp)
{
    var dt = timestamp.ToUniversalTimeDateTimeBySeconds();
    return TimeOnly.FromDateTime(dt);
}

14、時間戳(毫秒)轉UTC時間

該方法是把13位毫秒級時間戳轉為UTC時間TimeOnly,程式碼如下:

/// <summary>
/// 時間戳(毫秒)轉UTC時間
/// </summary> 
/// <param name="timestamp">時間戳(毫秒)</param>
/// <returns>UTC時間</returns>
public static TimeOnly ToUniversalTimeTimeByMilliseconds(this long timestamp)
{
    var dt = timestamp.ToUniversalTimeDateTimeByMilliseconds();
    return TimeOnly.FromDateTime(dt);
}

15、字串轉日期時間,轉換失敗則返回空

該方法是把字串轉為日期時間DateTime,轉換失敗則返回空,具體程式碼如下:

/// <summary>
/// 字串轉日期時間,轉換失敗則返回空
/// </summary>
/// <param name="source">需轉換的字串</param>
/// <returns>日期時間</returns>
public static DateTime? ToDateTime(this string source)
{
    if (DateTime.TryParse(source, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
    {
        return date;
    }
    return default;
}

16、字串轉日期時間,轉換失敗則返回預設日期時間

該方法是把字串轉為日期時間DateTime,轉換失敗則返回預設日期時間,具體程式碼如下:

/// <summary>
/// 字串轉日期時間,轉換失敗則返回預設值
/// </summary>
/// <param name="source">需轉換的字串</param>
/// <param name="dateTime">預設日期時間</param>
/// <returns>日期時間</returns>
public static DateTime ToDateTimeOrDefault(this string source, DateTime dateTime)
{
    if (DateTime.TryParse(source, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
    {
        return date;
    }
    return dateTime;
}

17、字串轉日期,轉換失敗則返回空

該方法是把字串轉為日期DateOnly,轉換失敗則返回空,具體程式碼如下:

/// <summary>
/// 字串轉日期,轉換失敗則返回空
/// </summary>
/// <param name="source">需轉換的字串</param>
/// <returns>日期</returns>
public static DateOnly? ToDateOnly(this string source)
{
    if (DateOnly.TryParse(source, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
    {
        return date;
    }
    return default;
}

18、字串轉日期,轉換失敗則返回預設日期

該方法是把字串轉為日期DateOnly,轉換失敗則返回默日期,具體程式碼如下:

/// <summary>
/// 字串轉日期,轉換失敗則返回預設日期
/// </summary>
/// <param name="source">需轉換的字串</param>
/// <param name="dateOnly">預設日期</param>
/// <returns>日期</returns>
public static DateOnly ToDateOnlyOrDefault(this string source, DateOnly dateOnly)
{
    if (DateOnly.TryParse(source, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
    {
        return date;
    }
    return dateOnly;
}

19、字串轉時間,轉換失敗則返回空

該方法是把字串轉為日期TimeOnly,轉換失敗則返回空,具體程式碼如下:

/// <summary>
/// 字串轉時間,轉換失敗則返回空
/// </summary>
/// <param name="source">需轉換的字串</param>
/// <returns>時間</returns>
public static TimeOnly? ToTimeOnly(this string source)
{
    if (TimeOnly.TryParse(source, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
    {
        return date;
    }
    return default;
}

20、字串轉時間,轉換失敗則返回預設時間

該方法是把字串轉為日期TimeOnly,轉換失敗則返回預設時間,具體程式碼如下:

/// <summary>
/// 字串轉時間,轉換失敗則返回預設時間
/// </summary>
/// <param name="source">需轉換的字串</param>
/// <param name="timeOnly">預設時間</param>
/// <returns>時間</returns>
public static TimeOnly ToTimeOnlyOrDefault(this string source, TimeOnly timeOnly)
{
    if (TimeOnly.TryParse(source, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date))
    {
        return date;
    }
    return timeOnly;
}

稍晚些時候我會把庫上傳至Nuget上,大家可以搜尋Ideal.Core.Common直接使用。

:測試方法程式碼以及示例原始碼都已經上傳至程式碼庫,有興趣的可以看看。https://gitee.com/hugogoos/Ideal

相關文章