将字符串转换为日期格式

5

我有一个字符串,格式为"10/13/2009 12:00:00 AM"

请问如何使用C#将其转换为YYYYMMDD格式?

5个回答

12

确定您想要的两种格式,然后使用以下方法:

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

2

如果您的字符串是.Net可以理解的有效日期时间格式,那么您只需要使用以下代码:

   DateTime.Parse(yourString).ToString("yyyyMMdd")

编辑:.Net可以理解许多合理的日期时间格式,而无需明确的格式规范,但如果您的特定格式不可理解,则需要使用明确的格式规范。

   DateTime.ParseExact(yourString, format, 
         CultureInfo.InvariantCulture)).ToString("yyyyMMdd")

1
"C#" 没有任何有效的日期时间格式 - .NET 有默认格式,DateTime.Parse 将接受这些格式,但它们取决于系统的文化。在我看来,更好的做法是明确指出。 - Jon Skeet
编辑后已更正,但Jon并没有明确说明,这样做的优势在于能够处理“开箱即用”的所有 .Net 格式...根据情况/要求,我认为每种技术都有其适用的场景。 - Charles Bretana

0
你可以尝试这样做:
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");

0
string s =  String.Format("{0:yyyyMMdd}", Convert.ToDateTime("10/13/2009 12:00:00 AM"));

2
这在我的电脑上失败了 - 你假设 Convert.ToDateTime 可以处理那种格式,但在英国文化中它不能。 - Jon Skeet

0

这些解决方案都非常不错,但是如果传入的内容与模式不匹配,它们就会抛出异常。我喜欢使用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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接