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
则用于处理与特定文化相关的格式化和资源访问。两者都是全球化应用程序中不可或缺的工具,帮助开发者创建适应不同地区和语言用户需求的软件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2023-08-15 Sitecore Lincense 的更新