DateTime FormatException错误

时间:2011-09-08 06:42:50

标签: c# compact-framework .net-cf-3.5

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);

txtDatumDokum.Text就像“09.09.2011”。

但是我收到FormatException错误。我必须解析日期吗?

9 个答案:

答案 0 :(得分:3)

尝试使用 dd.MM.yyyy 格式字符串的DateTime.ParseExact

 DateTime.ParseExact(txtDatumDokum.Text, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None);

答案 1 :(得分:1)

不好看,无论如何试试这个:

string s = "09.09.2011";
DateTime dt = Convert.ToDateTime(
    s.Replace(".",
    new System.Globalization.DateTimeFormatInfo().DateSeparator));

答案 2 :(得分:0)

您需要告诉我们为什么文本输入正在使用此格式。如果是因为用户以这种方式输入,那么您需要确保格式与Thread.CurrentCulture.DateTimeFormat.ShortDatePattern给出的格式相匹配。改变文化(通过设定  Thread.CurrentCulture)到适当的值将解决您的问题。

如果你应该解析输入而不管它是什么格式,那么你需要先做一些手动处理(也许用string.Replace从输入中删除空格和其他分隔符,然后尝试使用DateTime.ParseExact和已知格式字符串解析日期。

但这一切都取决于为什么输入具有该格式,以及为什么您的应用程序的当前文化与之不匹配。

答案 3 :(得分:0)

你可以尝试这个,TryParse避免解析异常..然后你只需要检查结果以确保它被解析。

DateTime datuMDokumenta;
bool result = DateTime.TryParse(txtDatumDokum.Text, out datuMDokumenta);

您必须确定这是否适合您的应用程序。

查看此示例: http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx

根据你给出的日期判断你需要包含一种文化,de-DE接受01.01.11类型的日期,但我不确定你真正想要使用哪一种,你需要决定......代码看起来像这样:

using System.Globalization;

DateTime datuMDokumenta;
bool result = DateTime.TryParse(txtDatumDokum.Text, CultureInfo.CreateSpecificCulture("de-DE"), DateTimeStyles.None, out datuMDokumenta);

可在此处找到文化列表,为您选择合适的文化: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo%28v=vs.71%29.aspx

这里的优点是这段代码有点工作,但很难打破。假设您在TextBox上使用自由文本条目,则不希望抛出异常。

答案 4 :(得分:0)

是的,您必须解析当前文化中的输入日期。

string[] format = new string[] { "dd.MM.yyyy" };
string value = "09.09.2011";
DateTime datetime;

if (DateTime.TryParseExact(value, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out datetime))
      //Valid
else
     //Invalid

答案 5 :(得分:0)

DateTime dt = Convert.ToDateTime(txtDatumDokum.Text)

这是对的......没有isssue

答案 6 :(得分:0)

在紧凑框架3.5下的反序列化调用期间,我之前遇到了一些意想不到的行为。

我已经从使用OpenNETCF序列化类转换为框架XML序列化类。这样做时,默认时间格式已更改,属性/公共成员的顺序也已更改。总而言之,我已经公开了一个文本属性,它将我的日期时间转换回我的VB6应用程序所期望的格式。

            Dim dumbDate As New Date
            Dim formats() As String = {"yyyy-MM-ddTHH:mm:ss.fffzzz", _
                                       "yyyy-MM-dd HH:mm:ss:fffffffzzz"}

            _datetimeTaken = dumbDate.ParseExact(value, formats, CultureInfo.InvariantCulture, DateTimeStyles.None)

            ' There is something wrong with compact framework during the Serialization calls. 
            ' calling the shared method Date.Parse or Date.ParseExact does not produce the same
            ' result as calling a share method on an instance of Date. WTF?!?!?!
            ' The below will cause a "Format" exception.
            '_datetimeTaken = Date.ParseExact(value, formats, CultureInfo.InvariantCulture, DateTimeStyles.None)

Date.blah不起作用。 dumbDate.blah有效。奇怪。

答案 7 :(得分:0)

    public static void Main(string[] args)
    {
        var dt = new DateTime(2018, 04, 1);
        Console.WriteLine(dt);
       
        string month = dt.ToString("MMMM");
        Console.WriteLine(month);               //April

        month = dt.ToString("MMM");
        Console.WriteLine(month);              //Apr

        month = dt.ToString("MM");
        Console.WriteLine(month);             //04

        Console.ReadKey();
    }

答案 8 :(得分:-3)

您的代码:

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);

尝试将其更改为:

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum);

当你打印date/time

print datuMDokumenta.Text