Преобразовать строку в дату - C # - PullRequest
5 голосов
/ 22 октября 2010

Как бы я мог преобразовать строку типа «В понедельник 25 марта 2010 ...» в 25/03/10? Кроме того, возможно ли это?

Ответы [ 4 ]

15 голосов
/ 22 октября 2010

Вы можете использовать DateTime.ParseExact, но я думаю, что вы должны отключить "Вкл", прежде чем пытаться разобрать его.

РЕДАКТИРОВАТЬ В соответствии с документацией формата вам, вероятно, не нужно снимать флажок "Вкл.".

var theDate = DateTime.ParseExact(theString, "On dddd ddth MMMM yyy",
                  CultureInfo.InvariantCulture);

Должен это сделать.

2 голосов
/ 22 октября 2010

Вы не можете сделать это с помощью одного анализа даты.Любая строка формата, которая работает для 25-го числа, потерпит неудачу для 22-го или 23-го числа.Лично я бы использовал регулярное выражение, чтобы разделить дату во что-нибудь пригодное для разбора.

string s = "On Monday 25th March 2010";
string pattern = @"^[^0-9]+(\d+)(\w\w)?";
string clean = Regex.Replace(s, pattern,@"$1");
string result = DateTime.ParseExact(clean,"dd MMMM yyyy",
      CultureInfo.InvariantCulture)
     .ToString("dd/MM/yy");
1 голос
/ 22 октября 2010

Как указывает Клаусбысков, DateTime.ParseExact - это путь. Я полагаю, что вам нужна правильная строка формата (проверено):

@"On dddd dd\t\h MMMM yyyy..."

Символы 't' и 'h' необходимо экранировать, поскольку они имеют особое значение (соответственно «AM / PM» и «hour»).

Обратите внимание, что анализатор выполнит некоторые проверки правильности. В частности, ваш пример не удастся проанализировать, поскольку 25 марта 2010 года произошло четверг; попробуйте это с:

"On Thursday 25th March 2010..."

Что касается вывода, вам нужна строка формата:

"dd/MM/yy"
0 голосов
/ 05 ноября 2012

используйте это:

using System; using System.Collections.Generic; using
System.ComponentModel; using System.Data; using System.Drawing; using
System.Text; using System.Windows.Forms;

namespace DateTimeConvert {
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
          label1.Text= ConvDate_as_str(textBox1.Text);
        }

        public string ConvDate_as_str(string dateFormat)
        {
            try
            {
                char[] ch = dateFormat.ToCharArray();
                string[] sps = dateFormat.Split(' ');
                string[] spd = sps[0].Split('.');
                dateFormat = spd[0] + ":" + spd[1]+" "+sps[1];
                DateTime dt = new DateTime();
                dt = Convert.ToDateTime(dateFormat);
                return dt.Hour.ToString("00") + dt.Minute.ToString("00");
            }
            catch (Exception ex)
            {
                return "Enter Correct Format like <5.12 pm>";
            }

        }


        private void button2_Click(object sender, EventArgs e)
        {
           label2.Text = ConvDate_as_date(textBox2.Text);
        }

        public string ConvDate_as_date(string stringFormat)
        {
            try
            {
                string hour = stringFormat.Substring(0, 2);
                string min = stringFormat.Substring(2, 2);
                DateTime dt = new DateTime();
                dt = Convert.ToDateTime(hour+":"+min);
                return String.Format("{0:t}", dt); ;
            }
            catch (Exception ex)
            {
                return "Please Enter Correct format like <0559>";
            }
        }
    }
}
...