Files
2025-12-11 11:39:02 +08:00

79 lines
2.7 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Copyright (C) Alibaba Cloud Computing
* All rights reserved.
*
* 版权所有 C阿里云计算有限公司
*/
using System;
using System.Diagnostics;
using System.Globalization;
namespace Aliyun.Api.LOG.Common.Utilities
{
/// <summary>
/// Description of DateUtils.
/// </summary>
public static class DateUtils
{
private static DateTime _1970StartDateTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
private const string _rfc822DateFormat = "ddd, dd MMM yyyy HH:mm:ss \\G\\M\\T";
private const string _iso8601DateFormat = "yyyy-MM-dd'T'HH:mm:ss.fff'Z'";
/// <summary>
/// Formats an instance of <see cref="DateTime" /> to a GMT string.
/// </summary>
/// <param name="dt">The date time to format.</param>
/// <returns></returns>
public static string FormatRfc822Date(DateTime dt)
{
return dt.ToUniversalTime().ToString(_rfc822DateFormat,
CultureInfo.InvariantCulture);
}
/// <summary>
/// Formats a GMT date string to an object of <see cref="DateTime" />.
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static DateTime ParseRfc822Date(String dt)
{
Debug.Assert(!string.IsNullOrEmpty(dt));
return DateTime.SpecifyKind(
DateTime.ParseExact(dt,
_rfc822DateFormat,
CultureInfo.InvariantCulture),
DateTimeKind.Utc);
}
/// <summary>
/// Formats a date to a string in the format of ISO 8601 spec.
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string FormatIso8601Date(DateTime dt)
{
return dt.ToUniversalTime().ToString(_iso8601DateFormat,
CultureInfo.CreateSpecificCulture("en-US"));
}
/// <summary>
/// convert time stamp to DateTime.
/// </summary>
/// <param name="timeStamp">seconds</param>
/// <returns></returns>
public static DateTime GetDateTime(uint timeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = ((long)timeStamp * System.TimeSpan.TicksPerSecond);
System.TimeSpan toNow = new System.TimeSpan(lTime);
DateTime targetDt = dtStart.Add(toNow);
return targetDt;
}
public static uint TimeSpan() {
return (uint)Math.Round((DateTime.Now - _1970StartDateTime).TotalSeconds, MidpointRounding.AwayFromZero);
}
}
}