Files
jizhi/backend/MiaoJiZhang.Api/Services/ChinaClock.cs
T
2026-07-24 23:11:20 +08:00

50 lines
1.5 KiB
C#

namespace MiaoJiZhang.Api.Services;
public static class ChinaClock
{
private static readonly Lazy<TimeZoneInfo> Zone = new(() =>
{
try
{
return TimeZoneInfo.FindSystemTimeZoneById("Asia/Shanghai");
}
catch (TimeZoneNotFoundException)
{
return TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");
}
});
public static DateTime Now => ToLocal(DateTime.UtcNow);
public static DateTime ToLocal(DateTime utc) =>
TimeZoneInfo.ConvertTimeFromUtc(
DateTime.SpecifyKind(utc, DateTimeKind.Utc),
Zone.Value);
public static DateTime ToUtc(DateTime local) =>
TimeZoneInfo.ConvertTimeToUtc(
DateTime.SpecifyKind(local, DateTimeKind.Unspecified),
Zone.Value);
public static (DateTime Start, DateTime End) WeekRangeUtc(DateTime localDate)
{
var date = DateTime.SpecifyKind(localDate.Date, DateTimeKind.Unspecified);
var offset = ((int)date.DayOfWeek + 6) % 7;
var start = date.AddDays(-offset);
return (ToUtc(start), ToUtc(start.AddDays(7)));
}
public static (DateTime Start, DateTime End) MonthRangeUtc(int year, int month)
{
var start = new DateTime(year, month, 1);
return (ToUtc(start), ToUtc(start.AddMonths(1)));
}
public static (DateTime Start, DateTime End) YearRangeUtc(int year)
{
var start = new DateTime(year, 1, 1);
return (ToUtc(start), ToUtc(start.AddYears(1)));
}
}