C# 日历
最后修改于 2023 年 7 月 5 日
在本文中,我们将展示如何在 C# 中使用日历。
DateTime 表示时间中的一个瞬间。 datetime 的字符串表示形式是特定于区域性的,并且取决于用于显示日期和时间的约定及其日历。日历是一种组织 datetime 单位的系统。
CultureInfo 提供有关特定区域性的信息。 这些信息包括区域性的名称、书写系统、使用的日历、字符串的排序顺序以及日期和数字的格式。 GregorianCalendar 是最流行的日历,并用作独立于区域性的选项的默认日历。
每个 CultureInfo 都支持一组日历。 Calendar 返回区域性的默认日历。 OptionalCalendars 提供一个数组,其中包含该区域性支持的所有日历。
.NET 支持多种日历,包括 GregorianCalendar、HebrewCalendar、HijriCalendar、JapaneseCalendar、JulianCalendar 或 PersianCalendar。
.NET 日历类型位于 System.Globalization 命名空间中。
C# 默认日历
每种文化都有一个默认日历。 例如,斯洛伐克、匈牙利和俄罗斯使用 GregorianCalendar。 有些文化可以选择其他日历。 波斯文化使用 PersianCalendar 作为默认日历,并将 GregorianCalendar 和 HijriCalendar 作为可选日历。
using System.Globalization;
Console.WriteLine(CultureInfo.InvariantCulture.Calendar);
Console.OutputEncoding = System.Text.Encoding.UTF8;
string[] culs = { "sk-SK", "he-IL", "hi-IN", "fa-IR" };
foreach (var cul in culs)
{
DateTime now = DateTime.Now;
var ci = new CultureInfo(cul);
Console.WriteLine($"{now.ToString("F", ci)}");
Console.WriteLine(ci.Calendar);
Console.WriteLine("==========");
foreach (var oc in ci.OptionalCalendars)
{
Console.WriteLine(oc);
}
Console.WriteLine("--------------------------------");
}
该示例打印了几个文化的默认日历和可选日历。
Console.WriteLine(CultureInfo.InvariantCulture.Calendar);
我们打印 InvariantCulture 的默认日历。
string[] culs = { "sk-SK", "he-IL", "hi-IN", "fa-IR" };
我们选择四种不同的文化:斯洛伐克语、希伯来语、印地语和波斯语。
DateTime now = DateTime.Now;
var ci = new CultureInfo(cul);
Console.WriteLine($"{now.ToString("F", ci)}");
我们定义 CultureInfo 并在这种文化中显示当前的 datetime。
Console.WriteLine(ci.Calendar);
我们打印该文化的默认日历。
foreach (var oc in ci.OptionalCalendars)
{
Console.WriteLine(oc);
}
如果有的话,我们打印可选日历。
$ dotnet run System.Globalization.GregorianCalendar streda 5. júla 2023 15:02:02 System.Globalization.GregorianCalendar ========== System.Globalization.GregorianCalendar -------------------------------- יום רביעי, 5 ביולי 2023 15:02:02 System.Globalization.GregorianCalendar ========== System.Globalization.GregorianCalendar System.Globalization.HebrewCalendar System.Globalization.HijriCalendar -------------------------------- बुधवार, 5 जुलाई 2023 3:02:02 pm System.Globalization.GregorianCalendar ========== System.Globalization.GregorianCalendar -------------------------------- 1402 تیر 14, چهارشنبه 15:02:02 System.Globalization.PersianCalendar ========== System.Globalization.PersianCalendar System.Globalization.GregorianCalendar System.Globalization.HijriCalendar --------------------------------
C# HebrewCalendar
HebrewCalendar 代表希伯来日历。
using System.Globalization;
Console.OutputEncoding = System.Text.Encoding.UTF8;
var hc = new HebrewCalendar();
var d1 = new DateTime(5776, 10, 7, hc);
Console.WriteLine($"{d1:d}");
Console.WriteLine($"{hc.GetYear(d1)}/{hc.GetMonth(d1)}/{hc.GetDayOfMonth(d1)}");
在此示例中,我们定义了希伯来日历中的一个 datetime,并以 Gregorian 和 Hebrew 字符串表示形式打印它。
var hc = new HebrewCalendar(); var d1 = new DateTime(5776, 10, 7, hc);
日历作为 DateTime 构造函数的第四个参数传递。
$ dotnet run 6/13/2016 5776/10/7
在下一个示例中,我们打印希伯来文化中允许的所有三个日历中的 datetime。
using System.Globalization;
Console.OutputEncoding = System.Text.Encoding.UTF8;
CultureInfo heCul = CultureInfo.CreateSpecificCulture("he-IL");
var now = DateTime.Today;
heCul.DateTimeFormat.Calendar = new GregorianCalendar();
Console.WriteLine(now.ToString("D", heCul));
heCul.DateTimeFormat.Calendar = new HebrewCalendar();
Console.WriteLine(now.ToString("D", heCul));
heCul.DateTimeFormat.Calendar = new HijriCalendar();
Console.WriteLine(now.ToString("D", heCul));
我们在 Gregorian、Hebrew 和 Hijri 日历中打印今天的希伯来日期。
$ dotnet run יום רביעי, 5 ביולי 2023 יום רביעי, ט"ז בתמוז תשפ"ג יום רביעי, 17 בד׳ו אל־חיג׳ה 1444
比较日期
在下一个示例中,我们比较三种不同文化中的日期。
using System.Globalization;
var skCul = new CultureInfo("sk-SK");
var saCul = new CultureInfo("ar-SA");
var faCul = new CultureInfo("fa-IR");
var hc = new HijriCalendar();
var pc = new PersianCalendar();
var now = DateTime.Now;
var tom = now.AddDays(1);
var skd = new DateTime(now.Year, now.Month, now.Day, skCul.Calendar);
var sad = new DateTime(hc.GetYear(tom), hc.GetMonth(tom), hc.GetDayOfMonth(tom), saCul.Calendar);
var fad = new DateTime(pc.GetYear(now), pc.GetMonth(now), pc.GetDayOfMonth(now), faCul.Calendar);
Console.WriteLine(skd == fad);
Console.WriteLine(skd > sad);
在此示例中,我们定义了斯洛伐克语、阿拉伯语和波斯语文化。 我们比较其默认日历中的 datetime 值。
var skCul = new CultureInfo("sk-SK");
var saCul = new CultureInfo("ar-SA");
var faCul = new CultureInfo("fa-IR");
定义了斯洛伐克语、阿拉伯语和波斯语 CultureInfo 对象。
var hc = new HijriCalendar(); var pc = new PersianCalendar();
我们为阿拉伯文化定义一个 HijriCalendar,为波斯/法尔西文化定义一个 PersianCalendar。 斯洛伐克文化使用 GregorianCalendar。
var now = DateTime.Now; var tom = now.AddDays(1);
我们定义了两个日期。 这些值在 GregorianCalendar 中。
var skd = new DateTime(now.Year, now.Month, now.Day, skCul.Calendar); var sad = new DateTime(hc.GetYear(tom), hc.GetMonth(tom), hc.GetDayOfMonth(tom), saCul.Calendar); var fad = new DateTime(pc.GetYear(now), pc.GetMonth(now), pc.GetDayOfMonth(now), faCul.Calendar);
我们在三种不同的日历中创建三个 DateTime 值。 我们使用 GetYear、GetMonth 和 GetDayOfMonth 方法来获取指定日历的适当值。
Console.WriteLine(skd == fad); Console.WriteLine(skd > sad);
我们使用算术运算符比较 datetime 值。
$ dotnet run True False
来源
在本文中,我们使用了 C# 中的日历。
作者
列出所有 C# 教程。