DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);
txtDatumDokum.Text类似于“09.09.2011”。
但我收到FormatException错误。我必须解析日期吗?
DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);
txtDatumDokum.Text类似于“09.09.2011”。
但我收到FormatException错误。我必须解析日期吗?
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;
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上的自由文本输入,您不想抛出异常。
是的,您必须在当前文化中解析输入日期。
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
在紧凑框架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可以工作。奇怪。
您需要告诉我们为什么文本输入使用这种格式。如果是因为用户以这种方式输入,那么您需要确保格式与 Thread.CurrentCulture.DateTimeFormat.ShortDatePattern
给出的格式相匹配。通过设置 Thread.CurrentCulture
为适当的值来更改区域设置,然后解决您的问题。
如果您需要解析输入,无论其格式如何,那么您需要先进行一些手动处理(例如使用 string.Replace
删除输入中的空格和其他分隔符字符),然后使用 DateTime.ParseExact
和已知的格式字符串尝试解析日期。
但这都取决于输入为什么具有该格式,以及您的应用程序当前的区域设置为什么不匹配它。
DateTime dt = Convert.ToDateTime(txtDatumDokum.Text)
没问题,一切正常。
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();
}
你的代码:
DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);
尝试将其更改为:
DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum);
当您打印日期/时间
时
打印datuMDokumenta.Text
ConvertToDateTime()
函数接受一个文本框作为参数吗? - Marco