C# 关于DateTime等类的用法
这个注册表路径下,可以看到所有的 TimeZone Id: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion

在 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
TimeZoneInfo 和 CultureInfo 是 .NET Framework 中两个不同的类,它们分别用于处理时区和文化特定的信息。以下是对这两个类的详细说明:
TimeZoneInfo
TimeZoneInfo 类是 .NET Framework 中用于处理时区信息的类。它提供了一系列方法和属性来获取和转换不同时区的时间。以下是 TimeZoneInfo 的一些关键特性:
- 获取本地时区:
TimeZoneInfo.Local属性提供了对当前系统设置的本地时区的引用。 - 获取 UTC 时区:
TimeZoneInfo.Utc属性提供了协调世界时(UTC)的引用。 - 枚举系统时区:
TimeZoneInfo.GetSystemTimeZones()方法返回一个包含系统上所有定义时区的只读集合。 - 查找特定时区:
TimeZoneInfo.FindSystemTimeZoneById(id)方法可以根据提供的时区 ID 字符串获取特定的TimeZoneInfo对象。 - 时间转换:
TimeZoneInfo类提供了ConvertTime、ConvertTimeToUtc和ConvertTimeFromUtc方法来在不同时区之间转换时间。 - 考虑夏令时:
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属性,它包含了与日期和时间格式化相关的信息和方法。 - 格式化数字和货币:
CultureInfo的NumberFormat属性包含了数字、货币和百分比的格式化信息。 - 排序和比较:
CultureInfo提供了CompareInfo属性,它可以用来执行字符串的排序和比较,考虑文化特定的排序规则。 - 资源查找:在多语言应用程序中,
CultureInfo可以与资源文件结合使用,根据当前文化动态加载相应的资源。
总的来说,TimeZoneInfo 主要用于处理与时区相关的时间转换和夏令时调整,而 CultureInfo 则用于处理与特定文化相关的格式化和资源访问。两者都是全球化应用程序中不可或缺的工具,帮助开发者创建适应不同地区和语言用户需求的软件。

浙公网安备 33010602011771号