Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert date to word format?

I have one date like 12/05/2012 now i would like to change that format in to simple string.

for ex.

string newdate = new string();
newdate = "12/05/2012";
DateTime Bdate = DateTime.ParseExact(Newdate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);

now my BDate is DateTime ie. BDate= 2012/05/12

now i want to do something like

if my Bdate is 12/05/2012 so i want a string which is similar like "Twelve May two thousand twelve"

How can i do this?

Please help me...

Thanks in advance....

like image 380
AB Vyas Avatar asked May 12 '12 17:05

AB Vyas


People also ask

How do I change date to text without losing format?

Copy the dates that are in the cells that you want to convert. Copy the text and paste it into Notepad. Return to Excel and pick the cells into which you wish to paste the dates. Go to Home –> Number and pick the Text format with the cells chosen (from the drop down).


1 Answers

You'll need to look at each date part and use a function to get the written equivalent. I've included a class below that converts integers to written text, and extended it to support DateTime conversion as well:

public static class WrittenNumerics
{
    static readonly string[] ones = new string[] { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };
    static readonly string[] teens = new string[] { "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
    static readonly string[] tens = new string[] { "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
    static readonly string[] thousandsGroups = { "", " Thousand", " Million", " Billion" };

    private static string FriendlyInteger(int n, string leftDigits, int thousands)
    {
        if (n == 0)
            return leftDigits;

        string friendlyInt = leftDigits;
        if (friendlyInt.Length > 0)
            friendlyInt += " ";

        if (n < 10)
            friendlyInt += ones[n];
        else if (n < 20)
            friendlyInt += teens[n - 10];
        else if (n < 100)
            friendlyInt += FriendlyInteger(n % 10, tens[n / 10 - 2], 0);
        else if (n < 1000)
            friendlyInt += FriendlyInteger(n % 100, (ones[n / 100] + " Hundred"), 0);
        else
            friendlyInt += FriendlyInteger(n % 1000, FriendlyInteger(n / 1000, "", thousands + 1), 0);

        return friendlyInt + thousandsGroups[thousands];
    }

    public static string DateToWritten(DateTime date)
    {
        return string.Format("{0} {1} {2}", IntegerToWritten(date.Day), date.ToString("MMMM"), IntegerToWritten(date.Year));
    }

    public static string IntegerToWritten(int n)
    {
        if (n == 0)
            return "Zero";
        else if (n < 0)
            return "Negative " + IntegerToWritten(-n);

        return FriendlyInteger(n, "", 0);
    }
}

Disclaimer: Basic functionality courtesy of @Wedge

Using this class, just call the DateToWritten method:

var output = WrittenNumerics.DateToWritten(DateTime.Today);

The output of the above is: Twelve May Two Thousand Twelve

like image 54
James Johnson Avatar answered Oct 07 '22 02:10

James Johnson