将字符串转换为日期 - C#

时间:2010-10-22 16:42:02

标签: c# .net string datetime

我怎样才能将“2010年3月25日星期一......”之类的字符串转换为25/03/10? 还有,这可能吗?

4 个答案:

答案 0 :(得分:15)

您可以使用DateTime.ParseExact,但我认为在尝试解析之前必须先删除“On”。

编辑根据format documentation,您可能不必在“开始”之后删除。

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

应该这样做。

答案 1 :(得分:2)

单独使用日期解析不能这样做。适用于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");

答案 2 :(得分:1)

正如克劳斯比斯科所指出的,DateTime.ParseExact是要走的路。 我相信你需要的正确格式字符串是(测试过的):

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

't'和'h'字符需要转义,因为它们具有特殊意义(分别为'AM / PM'和'小时')。

但请注意,解析器将执行一些验证检查。特别是,你的例子将无法解析,因为2010年3月25日恰好是星期四;试试看:

"On Thursday 25th March 2010..."

对于输出,您需要的格式字符串是:

"dd/MM/yy"

答案 3 :(得分:-1)

使用它:

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>";
            }
        }
    }
}