C# 将shamsi日期转换为miladi日期

C# 将shamsi日期转换为miladi日期,c#,C#,如何将Shamsi日期转换为Miladi日期? 例如,我的值是1374/06/27,我想将此日期转换为米兰日期1995/09/18。 我找不到将Shamsi转换为Miladi的函数。 这个函数是什么?这个答案假设“Shamsi”表示“太阳历”或“波斯历”,而“Miladi”表示“公历”。这就是我的研究所表明的,尽管我以前从未听说过这两个术语 使用System.DateTime 如果您乐于使用内置类型,则可以像下面这样简单地执行转换: Calendar persian=新的PersianCalen

如何将Shamsi日期转换为Miladi日期? 例如,我的值是1374/06/27,我想将此日期转换为米兰日期1995/09/18。 我找不到将Shamsi转换为Miladi的函数。 这个函数是什么?

这个答案假设“Shamsi”表示“太阳历”或“波斯历”,而“Miladi”表示“公历”。这就是我的研究所表明的,尽管我以前从未听说过这两个术语

使用System.DateTime 如果您乐于使用内置类型,则可以像下面这样简单地执行转换:

Calendar persian=新的PersianCalendar();
DateTime日期=新的日期时间(1374,6,27,波斯语);
Console.WriteLine(日期.年份);//1995
Console.WriteLine(日期.月份);//9
Console.WriteLine(date.Day);//18
基本上,
DateTime
始终在公历系统中,即使您使用不同的日历系统构造值。(请注意,只需使用
Console.WriteLine(date)
即可将其转换回默认区域性的默认日历系统,这就是我没有在同一代码中这样做的原因。)

相反,您需要使用
波斯语.GetYear(date)

使用NodaTime 就我个人而言,当你指定一个日历系统时,这就是价值本身的一部分。因此,您可以使用波斯日历系统构建日期,这是它将永远使用的日历系统-但很容易将其转换为公历系统中的日期,反之亦然:

localdatepersiandate=新的LocalDate(1374,6,27,CalendarSystem.PersianArithmetic);
LocalDate gregorianDate=persianDate.WithCalendar(CalendarSystem.Gregorian);

显然,我认为出于这种清晰的目的,使用NodaTime是值得的——还有许多其他原因——但选择权在你。

Persia.NET Core是一个类库,用于将波斯语、格里高利语和阿拉伯语(Hijri)日期相互转换。此库是基于.NET Core 3.1开发的

将格里高利转换为沙姆西

Persia.SolarDate solarDate = Persia.Calendar.ConvertToPersian(DateTime.Now);
// getting the simple format of persian date
string str = solarDate.ToString();
将Shamsi转换为格里高利

DateTime ConvertToGregorian(SolarDate solarDate)
DateTime ConvertToGregorian(LunarDate lunarDate)
DateTime ConvertToGregorian(int year, int month, int day, DateType dateType)
DateTime ConvertToGregorian(int year, int month, int day, int hour, int minute, int
second, DateType dateType)

更多细节和下载自

我相信Shamsi日历是我通常所知道的波斯或太阳Hijri日历-但我以前从未听说过“Miladi”,我正在努力寻找任何参考资料。对于您给出的示例,如果“Miladi”是公历系统,它会起作用,但我不想假设它。谢谢您的回答。如何将此结果更改为1995/09/18@SoheilaTarighi:这是一个格式化日期的问题-关于堆栈溢出,已经有很多问题了。我强烈建议在格式化时指定不变的区域性,以确保它不会将其转换回其他日历系统。