【发布时间】:2011-04-29 06:42:54
【问题描述】:
如何将“2010 年 3 月 25 日星期一...”之类的字符串转换为 25/03/10? 还有,这可能吗?
【问题讨论】:
如何将“2010 年 3 月 25 日星期一...”之类的字符串转换为 25/03/10? 还有,这可能吗?
【问题讨论】:
使用这个:
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>";
}
}
}
}
【讨论】:
你不能单独使用日期解析来做到这一点。任何适用于 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");
【讨论】:
你可以使用DateTime.ParseExact,但我认为你必须在尝试解析之前去掉“On”。
编辑根据format documentation,您可能根本不必去掉“On”。
var theDate = DateTime.ParseExact(theString, "On dddd ddth MMMM yyy",
CultureInfo.InvariantCulture);
应该这样做。
【讨论】:
正如 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"
【讨论】: