我使用下面的函数将公历日期转换为波斯日期,但我无法编写一个函数来进行反向转换。我想要一个将波斯语日期(类似于“1390/07/18 12:00:00”的字符串)转换为格鲁吉亚语日期的函数。
public static string GetPdate(DateTime _EnDate)
{
PersianCalendar pcalendar = new PersianCalendar();
string Pdate = pcalendar.GetYear(_EnDate).ToString("0000") + "/" +
pcalendar.GetMonth(_EnDate).ToString("00") + "/" +
pcalendar.GetDayOfMonth(_EnDate).ToString("00") + " " +
pcalendar.GetHour(_EnDate).ToString("00") + ":" +
pcalendar.GetMinute(_EnDate).ToString("00") + ":" +
pcalendar.GetSecond(_EnDate).ToString("00");
return Pdate;
}
最佳答案
DateTime
实际上总是 在公历中。即使您创建指定不同日历的实例,Day
、Month
、Year
等属性返回的值也是公历。
以伊斯兰历的开始为例:
using System;
using System.Globalization;
class Test
{
static void Main()
{
DateTime epoch = new DateTime(1, 1, 1, new HijriCalendar());
Console.WriteLine(epoch.Year); // 622
Console.WriteLine(epoch.Month); // 7
Console.WriteLine(epoch.Day); // 18
}
}
不清楚您如何创建此方法的输入,或者您是否应该真的将其转换为字符串格式。 (或者为什么你不使用内置的字符串格式化程序。)
可能您可以只使用:
public static string FormatDateTimeAsGregorian(DateTime input)
{
return input.ToString("yyyy'/'MM'/'dd' 'HH':'mm':'ss",
CultureInfo.InvariantCulture);
}
这将适用于 任何 DateTime
已适当 创建的 - 但我们不知道您在此之前做了什么。
示例:
using System;
using System.Globalization;
class Test
{
static void Main()
{
DateTime epoch = new DateTime(1, 1, 1, new PersianCalendar());
// Prints 0622/03/21 00:00:00
Console.WriteLine(FormatDateTimeAsGregorian(epoch));
}
public static string FormatDateTimeAsGregorian(DateTime input)
{
return input.ToString("yyyy'/'MM'/'dd' 'HH':'mm':'ss",
CultureInfo.InvariantCulture);
}
}
现在,如果您在创建 DateTime
时没有指定日历,那么您根本就没有真正创建波斯日期。
如果你想要跟踪他们日历系统的日期,你可以使用我的 Noda Time项目,现在支持波斯历:
// In Noda Time 2.0 you'd just use CalendarSystem.Persian
var persianDate = new LocalDate(1390, 7, 18, CalendarSystem.GetPersianCalendar());
var gregorianDate = persianDate.WithCalendar(CalendarSystem.Iso);
关于c# - 如何将波斯日期转换为公历日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13329631/