C# 日期时间格式异常错误
文本类似于“09.09.2011”C# 日期时间格式异常错误,c#,compact-framework,.net-cf-3.5,C#,Compact Framework,.net Cf 3.5,文本类似于“09.09.2011” 但我得到了一个异常错误。我必须解析日期吗?请使用dd.MM.yyyy格式字符串尝试DateTime.ParseExact DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text); 这不好看,无论如何,试试这个: DateTime.ParseExact(txtDatumDokum.Text, "yyyyMMdd", CultureInfo.InvariantCulture, DateT
但我得到了一个异常错误。我必须解析日期吗?请使用dd.MM.yyyy格式字符串尝试DateTime.ParseExact
DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);
这不好看,无论如何,试试这个:
DateTime.ParseExact(txtDatumDokum.Text, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None);
您的代码:
string s = "09.09.2011";
DateTime dt = Convert.ToDateTime(
s.Replace(".",
new System.Globalization.DateTimeFormatInfo().DateSeparator));
尝试将此更改为:
DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);
当您打印日期/时间时
打印datuMDokumenta.Text您需要告诉我们为什么文本输入使用此格式。如果是因为用户以这种方式输入,那么您需要确保格式与提供的格式匹配。更改区域性(通过设置
Thread.CurrentCulture
)设置为适当的值将解决您的问题
如果不管输入的格式是什么,都要对其进行解析,则需要先进行一些手动处理(可能会使用字符串从输入中删除空格和其他分隔符。替换),然后尝试使用和已知的格式字符串解析日期
但这完全取决于为什么输入具有这种格式,以及为什么应用程序的当前区域性与之不匹配。您可以尝试一下,TryParse可以避免解析异常。。然后您只需要检查结果以确保它已被解析
DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum);
您必须确定这对于您的应用程序是否是一个好的解决方案
请参见此示例:
根据您提供的日期判断,您需要包含一个区域性,de de接受01.01.11类型的日期,但我不确定您真正想要使用哪一个,您需要决定。。代码如下所示:
DateTime datuMDokumenta;
bool result = DateTime.TryParse(txtDatumDokum.Text, out datuMDokumenta);
可以在此处找到区域性列表,请为您选择合适的区域性:
另外,这段代码需要做更多的工作,但很难破解。假设您在文本框上使用自由文本条目,您不希望抛出异常。是的,您必须在当前区域性中解析输入日期
using System.Globalization;
DateTime datuMDokumenta;
bool result = DateTime.TryParse(txtDatumDokum.Text, CultureInfo.CreateSpecificCulture("de-DE"), DateTimeStyles.None, out datuMDokumenta);
DateTime dt=Convert.ToDateTime(txtDatumDokum.Text)
这是正确的…在compact framework 3.5下的反序列化调用过程中没有ISSUE,我以前遇到过一些意外行为
我已经从使用OpenNETCF序列化类转换为框架XML序列化类。在执行此操作时,默认时间格式已更改,并且属性/公共成员的顺序已更改。长话短说,我已经公开了一个文本属性,它可以将我的日期时间转换回VB6应用程序所期望的格式
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
Date.blah不起作用。dumbDate.胡说八道。奇怪。我在dotNet4.0中没有发现异常。请尝试检查是否在那里传递NULL或空字符串;thx它对我有用。所以,我必须始终使用DateTime.ParseExact,即使date像dd.MM一样有效。yyyy@senzacionale您不必使用parseexact,但如果您只打算以一种特定格式接收日期,则建议您尝试为您的区域使用正确的区域性,如果您不确定,则使用de de,这应该可以很好地工作,而不必使用parseexact,查看我的答案。您确定ConvertToDateTime()
接受文本框作为参数吗?它将抛出错误。您不能使用没有扩展名的文本框。因为我使用date.ToString(“dd.MM.yyyy”)。如果我使用ToSortDateString,那么我得到的是2011年9月8日,这是不正确的。我们的日期一定是08.09。2011@senzacionale:如果问题是关于CF 3.5的,请将其标记为CF 3.5。
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)
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();
}