我有一个字符串,格式为"10/13/2009 12:00:00 AM"
请问如何使用C#将其转换为YYYYMMDD格式?
确定您想要的两种格式,然后使用以下方法:
DateTime dt = DateTime.ParseExact(input, inputFormat,
CultureInfo.InvariantCulture);
string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture);
例如:using System;
using System.Globalization;
class Test
{
static void Main(string[] args)
{
string input = "10/13/2009 12:00:00 AM";
string inputFormat = "MM/dd/yyyy HH:mm:ss tt";
string outputFormat = "yyyyMMdd";
DateTime dt = DateTime.ParseExact(input, inputFormat,
CultureInfo.InvariantCulture);
string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture);
Console.WriteLine(output);
}
}
如果您的字符串是.Net可以理解的有效日期时间格式,那么您只需要使用以下代码:
DateTime.Parse(yourString).ToString("yyyyMMdd")
编辑:.Net可以理解许多合理的日期时间格式,而无需明确的格式规范,但如果您的特定格式不可理解,则需要使用明确的格式规范。
DateTime.ParseExact(yourString, format,
CultureInfo.InvariantCulture)).ToString("yyyyMMdd")
string myDate = "10/13/2009 12:00:00 AM";
DateTime result = new DateTime(DateTime.Now.Year, 1, 1);
DateTime.TryParse(myDate, out result);
string output = result.ToString("yyyyMMdd");
string s = String.Format("{0:yyyyMMdd}", Convert.ToDateTime("10/13/2009 12:00:00 AM"));
这些解决方案都非常不错,但是如果传入的内容与模式不匹配,它们就会抛出异常。我喜欢使用CSLA中的SmartDate类http://www.lhotka.net/cslanet/download.aspx。它可以很好地处理空值和无效值。其中TryStringToDate函数是实现这种魔法的关键:
private static bool TryStringToDate( string value, EmptyValue emptyValue, ref DateTime result )
{
DateTime tmp;
if( String.IsNullOrEmpty( value ) )
{
if( emptyValue == EmptyValue.MinDate )
{
result = DateTime.MinValue;
return true;
}
result = DateTime.MaxValue;
return true;
}
if( DateTime.TryParse( value, out tmp ) )
{
result = tmp;
return true;
}
string ldate = value.Trim().ToLower();
if( ldate == "SmartDateT" ||
ldate == "SmartDateToday" ||
ldate == "." )
{
result = DateTime.Now;
return true;
}
if( ldate == "SmartDateY" ||
ldate == "SmartDateYesterday" ||
ldate == "-" )
{
result = DateTime.Now.AddDays( -1 );
return true;
}
if( ldate == "SmartDateTom" ||
ldate == "SmartDateTomorrow" ||
ldate == "+" )
{
result = DateTime.Now.AddDays( 1 );
return true;
}
return false;
}
所以最终你应该得到类似这样的东西:
SmartDate dt = new SmartDate(input);
dt.FormatString = outputFormat;
string output = dt.Text;
Console.WriteLine(output);