.net 将日期从波斯语转换为公历

g6ll5ycj  于 2022-12-20  发布在  .NET
关注(0)|答案(6)|浏览(130)

如何使用System.globalization.PersianCalendar将波斯日期转换为公历日期?请注意,我想转换我的波斯日期(例如,今天是1391/04/07),并获得公历日期结果,在本例中将是06/27/2012。我正在数秒等待答案...

uqcuzwp8

uqcuzwp81#

其实很简单

// I'm assuming that 1391 is the year, 4 is the month and 7 is the day
DateTime dt = new DateTime(1391, 4, 7, persianCalendar);
// Now use DateTime, which is always in the Gregorian calendar

当你调用DateTime构造函数并传入一个Calendar时,它会为你转换它--所以dt.Year在本例中是2012.如果你想反其道而行之,你需要构造合适的DateTime,然后使用Calendar.GetYear(DateTime)等等.
简短但完整的程序:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        PersianCalendar pc = new PersianCalendar();
        DateTime dt = new DateTime(1391, 4, 7, pc);
        Console.WriteLine(dt.ToString(CultureInfo.InvariantCulture));
    }
}

上面写着2012年6月27日00:00:00.

ruarlubt

ruarlubt2#

您可以使用此代码将波斯日期转换为公历。

// Persian Date
var value = "1396/11/27";
// Convert to Miladi
DateTime dt = DateTime.Parse(value, new CultureInfo("fa-IR"));
// Get Utc Date
var dt_utc = dt.ToUniversalTime();
ih99xse1

ih99xse13#

您可以使用以下代码

return new DateTime(dt.Year,dt.Month,dt.Day,new System.Globalization.PersianCalendar());
nafvub8i

nafvub8i4#

我有一个扩展方法:

public static DateTime PersianDateStringToDateTime(this string persianDate)
 {
        PersianCalendar pc = new PersianCalendar();

        var persianDateSplitedParts = persianDate.Split('/');
        DateTime dateTime = new DateTime(int.Parse(persianDateSplitedParts[0]), int.Parse(persianDateSplitedParts[1]), int.Parse(persianDateSplitedParts[2]), pc);
        return DateTime.Parse(dateTime.ToString(CultureInfo.CreateSpecificCulture("en-US")));
 }

For more formats and culture-specific formats
示例:将1391/04/07转换为06/27/2012

9jyewag0

9jyewag05#

我测试这个代码在windows 7 & 10和运行很好,没有任何问题

/// <summary>
    /// Converts a Shamsi Date To Milady Date
    /// </summary>
    /// <param name="shamsiDate">string value in format "yyyy/mm/dd" or "yyyy-mm-dd"                     
     ///as shamsi date </param>
    /// <returns>return a DateTime in standard date format </returns>
public static DateTime? ShamsiToMilady(string shamsiDate)
    {
        if (string.IsNullOrEmpty(shamsiDate))
            return null;

        string[] datepart = shamsiDate.Split(new char[] { '/', '-' });
        if (datepart.Length != 3)
            return null;
        // 139p/k/b validation
        int year = 0, month = 0, day = 0;
        DateTime miladyDate;
        try
        {
            year = datepart[0].Length == 4 ? int.Parse(datepart[0]) : 
                                    int.Parse(datepart[2]);
            month = int.Parse(datepart[1]);
            day = datepart[0].Length == 4 ? int.Parse(datepart[2]) : 
                               int.Parse(datepart[0]);
            var currentCulture = Thread.CurrentThread.CurrentCulture;
            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            miladyDate = new DateTime(year, month, day, new PersianCalendar());
            Thread.CurrentThread.CurrentCulture = currentCulture;
        }
        catch
        {
            return null;
        }

        return miladyDate;
    }
vfhzx4xs

vfhzx4xs6#

To convert from Gregorian date to Persian(Iranian) date:

    string GetPersianDateYear(string PersianDate)
    {
       return PersianDate.Substring(0, 4);
    }
    
    string GetPersianDateMonth(string PersianDate)
    {
        if (PersianDate.Trim().Length > 8 || PersianDate.IndexOf('/') > 0 || PersianDate.IndexOf('-') > 0)
        {
            return PersianDate.Substring(5, 2);
        }
        else
        {
            return PersianDate.Substring(4, 2);
        }
    }
    
    string GetPersianDateDay(string PersianDate)
    {
         if (PersianDate.Trim().Length > 8 || PersianDate.IndexOf('/') > 0 || PersianDate.IndexOf('-') > 0)
         {
             return PersianDate.Substring(8, 2);
         }
         else
         {
             return PersianDate.Substring(6, 2);
         }
     }
    
     var PersianDate = "1348/10/01";
     var perDate = new System.Globalization.PersianCalendar();
     var dt = perDate.ToDateTime(GetPersianDateYear(PersianDate))
                                            , int.Parse(GetPersianDateMonth(PersianDate))
                                            , int.Parse(GetPersianDateDay(PersianDate)), 0, 0, 0, 0);

相关问题