将字符串转换为mm / dd / yyyy格式

时间:2014-08-04 13:22:01

标签: c# date

我有以下不同格式的字符串:

16/05/2014
21-Jun-2014
2014-05-16
16-05-2014
5/19/2014
14 May 2014

我需要在c#中将所有上述字符串转换为mm / dd / yyyy格式。 我在C#中尝试使用DateTime.ParseExact作为DateTime dt = DateTime.ParseExact("16-05-2014", "mm/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture),但我得到的异常是“字符串未被识别为有效的DateTime”。

我也尝试使用Convert.ToDateTime(),但它也无效。

我们可以在C#中编写/提供任何方法或功能,将上述字符串格式转换为单一日期格式,即“mm / dd / yyyy”格式吗?

对此的任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:3)

它在格式字符串的第一个字段上失败,它告诉函数处理" 16"作为分钟并查找输入中不存在的小时,分​​钟和秒。

您有多种不同的日期格式,因此需要ParseExact() overload that accepts several different format strings

string[] formats= {"dd/MM/yyyy", "dd-MMM-yyyy", "yyyy-MM-dd", 
                   "dd-MM-yyyy", "M/d/yyyy", "dd MMM yyyy"};
string converted = DateTime.ParseExact("16-05-2014", formats, CultureInfo.InvariantCulture, DateTimeStyles.None).ToString("MM/dd/yyyy");

还记得小写" m" s是几分钟。如果你想要几个月,你需要一个大写" M"。有关格式字符串的完整文档如下:

  

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

最后,我怀疑你在将输出格式化为字符串方面已经超前了。尽可能长时间地将这些值保存为DateTime对象,并且在向用户显示之前,仅在最后可能的时刻格式化为字符串。如果你真的想要一个字符串,至少坚持使用ISO 8601 standard format.

答案 1 :(得分:1)

您的主要问题是格式字符串错误。一小部分m表示分钟,一个较大的M表示月份 尝试传递数组中的所有格式。例如像这样

DateTime.ParseExact("16-05-2014",
                    new[] {"dd/MM/yyyy", "dd-MMM-yyyy", "yyyy-MM-dd", 
                        "dd-MM-yyyy", "M/d/yyyy", "dd MMM yyyy"},
                    CultureInfo.InvariantCulture, DateTimeStyles.None);

有了这个,您可以一次解析所有格式。 有关格式设置的详细信息,请参阅官方docs

答案 2 :(得分:1)

少数事情:

您的输入日期16/05/2014与您的格式Month/Day/Year不符 - 怎么会有第16个月?

其次,您使用的mm代表Minutes,而不是Months。您应该使用MM

最后,您的示例字符串16-05-2014与提供的格式不匹配,您使用了连字符-而不是正斜杠/

提供与您的输入相匹配的不同格式的集合:

string[] formats = new [] { "MM/dd/yyyy", "dd-MMM-yyyy", 
                            "yyyy-MM-dd", "dd-MM-yyyy", "dd MMM yyyy" };
DateTime dt = DateTime.ParseExact("05-16-2014", formats, CultureInfo.InvariantCulture, DateTimeStyles.None);

答案 3 :(得分:0)

DateTime对象上,您可以拨打.ToString("MM/dd/yyyy")。给定您拥有的字符串,您可以先为每个字符串创建新的DateTime对象,然后调用.ToString("MM/dd/yyyy")。例如:

var dateAsMmDdYyyy = DateTime.Now.ToString("MM/dd/yyyy");

答案 4 :(得分:0)

您可能会发现以下方法可用于接受您想要的任何日期格式并将其转换为DateTime:

public DateTime? DTNullable(string DateTimestring, string CurrDateTimeFormat)
{
    if (string.IsNullOrEmpty(DateTimestring)) return null;
    else
    {
        DateTime datetimeNotNull;
        DateTime.TryParseExact(DateTimestring, CurrDateTimeFormat, null, System.Globalization.DateTimeStyles.None, out datetimeNotNull);
        return datetimeNotNull;
    }
}

传入您想要的字符串,将其转换为DateTime及其当前日期时间格式,这将使您返回可为空的DateTime。如果您确定您传入的任何字符串都不为null,那么您可以删除该位。它存在的原因是你不能将null转换为DateTime。就我而言,我无法确定它是否存在,所以我也需要能够捕获空值。

你可以像这样使用它:

DateTime? MyDateTime = DTNullable(MyStartDate, "dd/MM/yyyy");

如果你想要你可以改变方法来接受一个字符串数组,只需遍历每个字符串并将它们全部返回到列表中,如果它们具有相同的格式。

正如其他人所指出的,月数是MM而不是mm(分钟)。