Initial project import
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
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)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user