将8位数字转换为日期时间类型

14

我想将一个8位数字的值转换为DateTime对象。我该怎么做?例如,如果用户输入08082010,则它应该使用C#将其转换为08/08/2010。


3
我很喜欢这个问题中使用了8月8日,这样做掩盖了我们是指 MM/dd/yyyy 还是 dd/MM/yyyy 不确定的歧义。 - Marc Gravell
5个回答

18
CultureInfo provider = CultureInfo.InvariantCulture;
string dateString = "08082010";
string format = "MMddyyyy";
DateTime result = DateTime.ParseExact(dateString, format, provider);

这将起作用。


6

我刚想尝试做同样的事情,我必须同意Ignacio的方法。被接受的答案是有效的,但是如果日期字符串无效,ParseExact方法会抛出异常,而TryParseExact方法只会返回false。例如:

using System.Globalization;
// ...
string dateString = "12212010";
string format = "MMddyyyy";
DateTime dateStarted;
if (!DateTime.TryParseExact(dateString, format, null, DateTimeStyles.None, out dateStarted))
    dateStarted = DateTime.Now;

6
使用 DateTime.ParseExact() 方法,格式说明符为 "ddMMyyyy""MMddyyyy"

0

我已经尝试了DateTime的所有方法,如Parse和TryParse,但它们对我都不起作用,这就是为什么我在这里提出问题的原因。 - Asim Sajjad
这样做不起作用,因为“08082010”不是DateTime.Parse的可接受日期格式。根据您的需求使用DateTime.ParseExact或DateTime.TryParseExact。 - ScottK

0

完全混乱是

 private static DateTime FormatDateTimeString(string stringToFormat)
    {
        var yearStr = stringToFormat.Substring(0,4);
        var monthofyearStr = stringToFormat.Substring(4, 2);
        var dayofmonthStr = stringToFormat.Substring(6, 2);
        var hourStr = stringToFormat.Substring(8, 2);
        var minuteStr = stringToFormat.Substring(10, 2);

        var year = int.Parse(yearStr);
        var monthofyear = int.Parse(monthofyearStr);
        var dayofmonth = int.Parse(dayofmonthStr);
        var hour = int.Parse(hourStr);
        var minute = int.Parse(minuteStr);

        if (year > 999 && year < 3000)
            if(monthofyear > 0 && monthofyear< 13)
                if (dayofmonth > 0 && dayofmonth < 32)
                    if (hour >= 0 && hour < 24)
                        if (minute >= 0 && minute < 60)
                            return new DateTime(year, monthofyear, dayofmonth, hour, minute, 0);

        return DateTime.MinValue;
    }

您可以修改此代码来处理不同长度的字符串,例如14、12、8个字符等。在调用之前先验证输入。


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