Member 13985914 Ответов: 3

Как конвертировать dob в word на языке Си#


привет, ребята, мне нужен код для изменения даты на текст в c# в winforms

Что я уже пробовал:

я искал но не нашел ничего красивого

3 Ответов

Рейтинг:
2

Maciej Los

Основываясь на ссылке, предоставленной Риком Зеландом в решении № 1, я адаптировал код таким образом:

void Main()
{
	DateTime[] dates = new DateTime[]
		{
			new DateTime(1981, 1, 28),
			new DateTime(1998, 2, 1),
			new DateTime(2000, 3, 31),
			new DateTime(2001, 4, 8),
			new DateTime(2016, 6, 5),
			new DateTime(1977, 8, 3),
			new DateTime(2012, 10, 12),
			new DateTime(1968, 12, 15)
		};

	foreach(DateTime dt in dates)
	{
		string dtw = DateToWords.Convert(dt);
		Console.WriteLine("{0} => '{1}'", dt.ToString("dd-MM-yyyy"), dtw);
	}
}

// Define other methods and classes here
public static class DateToWords
{
	private static CultureInfo ci = new CultureInfo("en-US");
	private static string[] unitsMap = new string[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", 
				"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
    private static string[] tensMap = new string[] { "Zero", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
		
	//https://stackoverflow.com/questions/2729752/converting-numbers-in-to-words-c-sharp
	private static string NumberToWords(int number)
	{
	    if (number == 0)
	        return "zero";
	
	    string words = "";
		
	    if ((number / 1000) > 0)
	    {
	        words += NumberToWords(number / 1000) + " Thousand ";
	        number %= 1000;
	    }
	
	    if ((number / 100) > 0)
	    {
	        words += NumberToWords(number / 100) + " Hundred ";
	        number %= 100;
	    }
	
	    if (number > 0)
	    {
	        if (words != "")
	            words += " ";
		
	        if (number < 20)
	            words += unitsMap[number];
	        else
	        {
	            words += tensMap[number / 10];
	            if ((number % 10) > 0)
	                words += " " + unitsMap[number % 10];
	        }
	    }
	
	    return Regex.Replace(words, @"\ {2,}", " ");
	}
		
	public static string Convert(DateTime dt)
	{
		//convert days
		string dtw = NumberToWords(dt.Day);
		
		//convert months
		dtw += " " + dt.ToString("MMMM", ci);	
		
		//convert years
		dtw += ", " + NumberToWords(dt.Year);
		
		return dtw;
	}
}


Результат:
28-01-1981 => 'Twenty Eight January, One Thousand Nine Hundred Eighty One'
01-02-1998 => 'One February, One Thousand Nine Hundred Ninety Eight'
31-03-2000 => 'Thirty One March, Two Thousand '
08-04-2001 => 'Eight April, Two Thousand One'
05-06-2016 => 'Five June, Two Thousand Sixteen'
03-08-1977 => 'Three August, One Thousand Nine Hundred Seventy Seven'
12-10-2012 => 'Twelve October, Two Thousand Twelve'
15-12-1968 => 'Fifteen December, One Thousand Nine Hundred Sixty Eight'


Maciej Los

Я просто добавил чаевые: Дата до слов[^]

Member 13985914

ваш код потрясающий, но мне нужно в winform, у меня есть (DOB в цифрах) в моем текстовом поле, и я хочу показать этот DOB в словах в другом текстовом поле

а также, пожалуйста, внесите изменения для меня, что он дает мне "1990" как "тысяча девятьсот девяносто", а для "2000" это хорошо

Maciej Los

Попробовать это:

CultureInfo ci = CultureInfo.CurentCulture; // or: new CultureInfo("en-US"); - enter your culture info
this.TextBox2.Text = DateToWords(DateTime.ParseExact(this.TextBox1.Text, "yyyy-MM-dd", ci); //enter correct date format!

Если мой ответ соответствует вашим потребностям, пожалуйста, примите его как решение (зеленая кнопка) - формально, чтобы удалить ваш вопрос из списка без ответа.

Member 13985914

заранее спасибо

Рейтинг:
2

RickZeeland

Смотрите примеры здесь: https://www.dotnetperls.com/datetime-format[^]

Чтобы преобразовать числа в слова, см.: преобразование чисел в слова C# - переполнение стека[^]


Member 13985914

Братан мне не нужен формат:
моя проблема в том, что:
у меня есть дата в текстовом поле, то есть 28-01-2019, и я хочу "двадцать восьмое января, две тысячи один год"

Maciej Los

И...
Что случилось со вторым звеном? Там вы найдете полный пример. Все, что вам нужно сделать, это изменить его в соответствии с вашими потребностями.
Совет: вы должны передать каждую часть даты методу (день, месяц и, наконец, год).

Рейтинг:
0

OriginalGriff

DateTime now = DateTime.Now;
Console.WriteLine(now.ToString("D"));
Подарю вам "28 января 2019 года"
Или есть:
DateTime now = DateTime.Now;
Console.WriteLine("{0:D}", now);
Что будет делать то же самое.

Какие еще слова тебе нужны?


Member 13985914

у меня есть дата в текстовом поле, то есть 28-01-2019, и я хочу "двадцать восьмое января, две тысячи один год"

OriginalGriff

Поэтому используйте DateTime.TryParse (или даже TryParseExact), чтобы преобразовать пользовательскую запись в значение DateTime, затем напишите конвертер "число в слова" (есть нагрузки в интернете, это обычная домашняя работа) и используйте его дважды. Месяц, который вы можете получить непосредственно из даты и времени.

Не используй эту штуку:
https://www.codeproject.com/Tips/103025/Converting-numbers-to-the-word-equivalent