C# 关于DateTime等类的用法

这个注册表路径下,可以看到所有的 TimeZone Id: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion
image

在 C# 中,DateTime.Now 默认 Kind 是 Local,是使用的本地系统时区。使用 ToUniversalTime() 之后,Kind 为 Utc,时间会转换为 UTC 时间。

[TestFixture]
public class Tests
{
[Test]
public void Test1()
{
// HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion
// 这个注册表路径下,可以看到所有的 TimeZone Id
// 查看所有的 TimeZone Id
ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones();
foreach (TimeZoneInfo zone in zones)
{
Console.WriteLine(zone.Id);
}
TimeZoneInfo timeZoneInfo = TimeZoneInfo.Local;
Console.WriteLine(timeZoneInfo.DisplayName); // (UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi
Console.WriteLine(timeZoneInfo.Id); // China Standard Time
Console.WriteLine(timeZoneInfo.DaylightName); // China Daylight Time
Console.WriteLine(timeZoneInfo.StandardName); // China Standard Time
Console.WriteLine(timeZoneInfo.SupportsDaylightSavingTime); // False
TimeSpan baseUtcOffset = timeZoneInfo.BaseUtcOffset;
Console.WriteLine(baseUtcOffset); // 08:00:00
CultureInfo currentCulture = CultureInfo.CurrentCulture;
var cultureInfo = new CultureInfo("zh-HK");
Console.WriteLine(currentCulture.DisplayName); // English (United States)
Console.WriteLine(cultureInfo.DisplayName); // Chinese (Traditional, Hong Kong S.A.R.)
// Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR"); // Set the current culture to French
DateTime now = DateTime.Now;
DateTime universalTimeNow = now.ToUniversalTime();
// DateTime universalTimeNow = TimeZoneInfo.ConvertTime(now, TimeZoneInfo.Utc); // 与上面一样的效果
// DateTime universalTimeNow = TimeZoneInfo.ConvertTimeToUtc(now); // 与上面一样的效果
Console.WriteLine(now); // 8/27/2024 09:53:36
Console.WriteLine(universalTimeNow); // 8/27/2024 01:53:36
DateTime utcNow = DateTime.UtcNow;
DateTime localTimeNow = utcNow.ToLocalTime();
// DateTime localTimeNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow); // 与上面一样的效果
// DateTime localTimeNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, TimeZoneInfo.Local); // 与上面一样的效果
Console.WriteLine(utcNow); // 8/27/2024 01:53:36
Console.WriteLine(localTimeNow); // 8/27/2024 09:53:36
}
}

在 C# 里关于时间相关的常用类

DateTime https://learn.microsoft.com/en-us/dotnet/api/system.datetime?view=netframework-4.8
DateTimeOffset https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset?view=netframework-4.8
DayOfWeek https://learn.microsoft.com/en-us/dotnet/api/system.dayofweek?view=netframework-4.8
TimeSpan
Calendar

CultureInfo
TimeZoneInfo

ToLocalTime() 会将时间按照当前时区差进行计算,比如 +8 时区,dateTime 是 2024/08/15 12:00 AM,进行 ToLocalTime() 之后会变成 2024/08/15 08:00 AM


TimeZoneInfoCultureInfo 是 .NET Framework 中两个不同的类,它们分别用于处理时区和文化特定的信息。以下是对这两个类的详细说明:

TimeZoneInfo

TimeZoneInfo 类是 .NET Framework 中用于处理时区信息的类。它提供了一系列方法和属性来获取和转换不同时区的时间。以下是 TimeZoneInfo 的一些关键特性:

  • 获取本地时区TimeZoneInfo.Local 属性提供了对当前系统设置的本地时区的引用。
  • 获取 UTC 时区TimeZoneInfo.Utc 属性提供了协调世界时(UTC)的引用。
  • 枚举系统时区TimeZoneInfo.GetSystemTimeZones() 方法返回一个包含系统上所有定义时区的只读集合。
  • 查找特定时区TimeZoneInfo.FindSystemTimeZoneById(id) 方法可以根据提供的时区 ID 字符串获取特定的 TimeZoneInfo 对象。
  • 时间转换TimeZoneInfo 类提供了 ConvertTimeConvertTimeToUtcConvertTimeFromUtc 方法来在不同时区之间转换时间。
  • 考虑夏令时TimeZoneInfo 自动考虑夏令时(Daylight Saving Time, DST)的调整。

CultureInfo

CultureInfo 类是 .NET Framework 中用于处理特定文化区域的特定信息的类。它包括语言、国家/地区、日历、货币、数字格式等。以下是 CultureInfo 的一些关键特性:

  • 获取当前文化CultureInfo.CurrentCulture 属性提供了当前线程的文化信息。
  • 获取当前 UI 文化CultureInfo.CurrentUICulture 属性用于获取当前线程的用户界面文化信息,通常用于资源文件的查找。
  • 创建特定文化实例:可以使用 new CultureInfo(name) 创建特定文化区域的实例,其中 name 是文化区域的名称,如 "en-US" 或 "zh-CN"。
  • 格式化日期和时间CultureInfo 提供了 DateTimeFormat 属性,它包含了与日期和时间格式化相关的信息和方法。
  • 格式化数字和货币CultureInfoNumberFormat 属性包含了数字、货币和百分比的格式化信息。
  • 排序和比较CultureInfo 提供了 CompareInfo 属性,它可以用来执行字符串的排序和比较,考虑文化特定的排序规则。
  • 资源查找:在多语言应用程序中,CultureInfo 可以与资源文件结合使用,根据当前文化动态加载相应的资源。

总的来说,TimeZoneInfo 主要用于处理与时区相关的时间转换和夏令时调整,而 CultureInfo 则用于处理与特定文化相关的格式化和资源访问。两者都是全球化应用程序中不可或缺的工具,帮助开发者创建适应不同地区和语言用户需求的软件。

posted @   灵火  阅读(73)  评论(0编辑  收藏  举报
历史上的今天:
2023-08-15 Sitecore Lincense 的更新
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起