【问题标题】:Convert string to Date - C#将字符串转换为日期 - C#
【发布时间】:2011-04-29 06:42:54
【问题描述】:

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

【问题讨论】:

    标签: c# .net string datetime


    【解决方案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>";
                }
            }
        }
    }
    

    【讨论】:

    • 为什么 OP 应该使用这个?请解释!
    【解决方案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");
    

    【讨论】:

      【解决方案3】:

      你可以使用DateTime.ParseExact,但我认为你必须在尝试解析之前去掉“On”。

      编辑根据format documentation,您可能根本不必去掉“On”。

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

      应该这样做。

      【讨论】:

        【解决方案4】:

        正如 klausbyskov 指出的那样,DateTime.ParseExact是要走的路。 我相信您需要的正确格式字符串是(已测试):

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

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

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

        "On Thursday 25th March 2010..."
        

        至于输出,你需要的格式字符串是:

        "dd/MM/yy"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-27
          • 2011-11-28
          • 2010-09-23
          • 2014-09-27
          相关资源
          最近更新 更多