53 lines
1.8 KiB
C#
53 lines
1.8 KiB
C#
namespace LMS.Common.Extensions
|
||
{
|
||
public class BeijingTimeExtension
|
||
{
|
||
/// <summary>
|
||
/// 获取北京时间,将时区转换为北京时间
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static DateTime GetBeijingTime()
|
||
{
|
||
return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,
|
||
TimeZoneInfo.FindSystemTimeZoneById("China Standard Time"));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 智能转换时间为北京时间
|
||
/// 如果是UTC时间则转换,否则直接返回
|
||
/// </summary>
|
||
/// <param name="dateTime">输入的时间</param>
|
||
/// <returns>北京时间</returns>
|
||
public static DateTime TransferUtcToBeijingTime(DateTime dateTime)
|
||
{
|
||
// 只有UTC时间才需要转换
|
||
if (dateTime.Kind == DateTimeKind.Utc)
|
||
{
|
||
try
|
||
{
|
||
// 优先使用系统时区信息
|
||
return TimeZoneInfo.ConvertTimeFromUtc(dateTime,
|
||
TimeZoneInfo.FindSystemTimeZoneById("China Standard Time"));
|
||
}
|
||
catch (TimeZoneNotFoundException)
|
||
{
|
||
try
|
||
{
|
||
// Linux系统可能使用这个ID
|
||
return TimeZoneInfo.ConvertTimeFromUtc(dateTime,
|
||
TimeZoneInfo.FindSystemTimeZoneById("Asia/Shanghai"));
|
||
}
|
||
catch (TimeZoneNotFoundException)
|
||
{
|
||
// 找不到时区就手动加8小时
|
||
return dateTime.AddHours(8);
|
||
}
|
||
}
|
||
}
|
||
|
||
// 非UTC时间直接返回
|
||
return dateTime;
|
||
}
|
||
}
|
||
}
|