将字符串转换为指定的日期格式

时间:2012-06-26 19:18:51

标签: c# datetime asp.net-4.0 datetime-format

我无法通过抛出不正确格式的异常来将字符串转换为日期:

这是patterens:

    DD-MM-YYYY
    MM-DD-YYYY
    YYYY-DD-MM
    YYYY-MM-DD
    YYYYDDMM
    YYYYMMDD

格式来自下拉列表,这是我尝试不同的方法,但仍然抛出异常:

 strCurrentFormat = rcboDateFormat.SelectedValue.ToString();

                 DateTime db = DateTime.ParseExact(strOldDate, "DD-MM-YYYY", CultureInfo.InvariantCulture);

                 //DateTime loadedDate = DateTime.ParseExact(strOldDate, strCurrentFormat, null);

之前我已经解决了这个问题,取了字符串,将它们拆分并将年,月和日移动到适当的格式,但这需要很长时间,如果有人知道更简单的方法,那将是一个巨大的帮助。

3 个答案:

答案 0 :(得分:5)

两件事:

首先 - 使用正确的格式字符串。 DY不是已知的格式说明符。 dy是。{/ p>

第二 - 您可以将格式放入字符串数组中,并使用获取该格式列表的ParseExact overload

string[] formats = new string[] 
   {"dd-MM-yyyy",
    "MM-dd-yyyy",
    "yyyy-dd-MM",
    "yyyy-MM-dd",
    "yyyyddMM",
    "yyyyMMdd"};

DateTime db = DateTime.ParseExact(strOldDate, 
                                  formats, 
                                  CultureInfo.InvariantCulture,
                                  DateTimeStyles.None);

将按顺序尝试格式。

答案 1 :(得分:1)

取自http://www.codeproject.com/Articles/14743/Easy-String-to-DateTime-DateTime-to-String-and-For

d - 没有前导零的月份的数字日。 dd - 月份的数字日,前导零。 ddd - 星期几的缩写名称。 dddd - 星期几的全名。

f,ff,fff,ffff,fffff,ffffff,fffffff -     一秒钟的分数。 Fs越多,精度越高。

h - 12小时时钟,没有前导零。 hh - 12小时时钟,前导零。 H - 24小时制,没有前导零。 HH - 24小时时钟,前导零。

m - 没有前导零的分钟。 mm - 带前导零的分钟。

M - 没有前导零的数字月份。 MM - 数字月份,前导零。 MMM - 月份的缩写名称。 MMMM - 全月名称。

s - 没有前导零的秒数。 ss - 领先零的秒数。

t - 上午/下午,但只有第一个字母。 tt - 上午/下午(上午/下午)

y - 年外世纪和领先零。 yy - 世纪之年,领先零。 yyyy - 世纪之年。

zz - 使用+/-设置时区关闭。

答案 2 :(得分:1)

您的格式字符串错误。

“d”和“y”需要小写,所以

dd-MM-yyyy

阅读有关MSDN上format string的所有内容。