2025-03-24 16:53:32 +08:00
|
|
|
|
namespace LMS.Common.Extensions
|
2024-10-13 17:04:47 +08:00
|
|
|
|
{
|
|
|
|
|
|
public class BeijingTimeExtension
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取北京时间,将时区转换为北京时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static DateTime GetBeijingTime()
|
|
|
|
|
|
{
|
|
|
|
|
|
return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,
|
|
|
|
|
|
TimeZoneInfo.FindSystemTimeZoneById("China Standard Time"));
|
|
|
|
|
|
}
|
2025-05-16 17:48:10 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-06-14 22:12:37 +08:00
|
|
|
|
/// 智能转换时间为北京时间
|
|
|
|
|
|
/// 如果是UTC时间则转换,否则直接返回
|
2025-05-16 17:48:10 +08:00
|
|
|
|
/// </summary>
|
2025-06-14 22:12:37 +08:00
|
|
|
|
/// <param name="dateTime">输入的时间</param>
|
|
|
|
|
|
/// <returns>北京时间</returns>
|
|
|
|
|
|
public static DateTime TransferUtcToBeijingTime(DateTime dateTime)
|
2025-05-16 17:48:10 +08:00
|
|
|
|
{
|
2025-06-14 22:12:37 +08:00
|
|
|
|
// 只有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;
|
2025-05-16 17:48:10 +08:00
|
|
|
|
}
|
2024-10-13 17:04:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|