1

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

这里是模式:

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

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

4

3 回答 3

5

两件事情:

首先 - 使用正确的格式字符串。D并且Y不是已知的格式说明符。d并且y是。

其次 - 您可以将格式放入字符串数组并使用采用该格式列表的ParseExact重载

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

格式将按顺序尝试。

于 2012-06-26T19:21:57.567 回答
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 - AM/PM 但只有第一个字母。tt - 上午/下午(上午/下午)

y - 没有世纪且前导零的年份。yy - 没有世纪的年份,前导零。yyyy - 带有世纪的年份。

zz - 时区偏移设置为 +/-。

于 2012-06-26T19:21:08.823 回答
1

您的格式字符串错误。

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

dd-MM-yyyy

阅读MSDN 上有关格式字符串的所有信息。

于 2012-06-26T19:22:15.893 回答