2012-06-26 37 views
1

我无法字符串转换日期与抛不正确的格式的例外:字符串转换成指定的日期格式

这里是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); 

我已经采取字符串之前,解决了这个问题,他们分裂和移动的年份和月份并且每天都采用适当的格式,但这需要很长时间,如果有人知道更简单的方式,这将是一个巨大的帮助。

回答

5

两件事:

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

第二 - 你可以把你的格式放到一个字符串数组中,并使用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); 

格式将按顺序尝试。

+0

谢谢你工作完美 – Developer

+0

@JonSenchyna - 它会尝试在每种格式连续,直到它成功。 OP的主要问题是格式字符串使用了不正确的格式说明符。 – Oded

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 - 没有前导零的分钟数。 毫米 - 带前导零的分钟。

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

s - 秒没有前导零。 ss - 带前导零的秒。

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

y - 带出世纪和领先零的年份。 yy - 带出世纪的年份,领先零。 yyyy - 与世纪的一年。

zz - 用+/-设置时区。

1

您的格式字符串错误。

你需要为小写字母 “d” 和 “Y”,所以

dd-MM-yyyy 

阅读所有关于format string MSDN上。

相关问题