我在这里有一个c#代码块:
string inputString = textBox1.Text;
DateTime dt;
try
{
if (DateTime.TryParseExact(inputString, "yyyyMMdd", null, DateTimeStyles.None, out dt) == true)
{
dt = dt.AddMonths(6);
textBox2.Text = dt.ToString("yyyyMMdd");
}
else if (DateTime.TryParseExact(inputString, "yyyy.MM.dd", null, DateTimeStyles.None, out dt) == true)
{
dt = dt.AddMonths(6);
textBox2.Text = dt.ToString("yyyyMMdd");
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
基本上,它的作用是,用户在textbox1中输入一个字符串,点击按钮,C#将检查文本框中的日期格式,然后在日期上添加6个月并将其在textbox2中输出为字符串格式yyyyMMdd。如您所见,它接受yyyyMMdd和yyyy.MM.dd并执行相同的过程。但我的问题是我还有很多日期格式:
dd-MM-yy
yyyy/mm/dd
yyyy-mm-dd
yy/mm/dd
我不想在我的IF语句中使用OR。有没有像格式那样的方式,将被接受并执行该过程。 非常感谢你们!
答案 0 :(得分:5)
One of the overloads of TryParseExact接受第二个参数作为字符串数组。但是,它不会告诉您确切使用的格式。如果你确实需要这些信息,那么是的,你只需要运行你想要的每种格式的单格式TryParseExact,看看哪种格式有效。
当然,您需要确保您允许的所有格式都明确指出哪些部分是日,月和年,否则您可能会解析01/02/03中的任何一种日期。
答案 1 :(得分:3)
DateTime.TryParseExact有一个重载,它接受多种格式来尝试解析。
DateTime date;
DateTime.TryParseExact("11-Nov-13", new[] { "yyyy-MM-dd","MM/dd/yy","dd-MMM-yy"}, null, DateTimeStyles.None, out date);
然而,李泰勒的评论仍然是正确的,如果你的格式可能含糊不清,你就不会确切地知道什么是错的。
如果您的解决方案要求您使用提供的相同样式返回格式化字符串,那么您需要将格式传递给循环并单独尝试。
答案 2 :(得分:0)
您可以使用 CultureInfo.CurrentUICulture.DateTimeFormat.GetAllDateTimePatterns()检查所有可能的格式,该名称存在于命名空间System.Globalization下。
您可以使用 DateTime.TryParseExact ,它具有接受多种格式的重载以尝试解析 - ParseExact(string s,string []格式,IFormatProvider提供者,DateTimeStyles样式)
示例代码:
private DateTime GetDate(string date)
{
DateTime dateTime = new DateTime();
string[] formats = CultureInfo.CurrentUICulture.DateTimeFormat.GetAllDateTimePatterns();
try
{
dateTime = DateTime.ParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
}
catch
{
throw ...;
}
return dateTime;
}