dd/MM/yyyy
的日期类型。this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
是什么问题?
它有第二个覆盖要求
IFormatProvider
。这是什么?我也需要通过吗?如果是,如何在这种情况下使用它?编辑
Parse
和ParseExact
有什么区别?编辑2
Slaks和Sam的答案都对我有用,当前用户正在提供输入,但是我可以通过使用maskTextbox保证它们是有效的。安全类型,性能或您感觉类似的方面
#1 楼
使用DateTime.ParseExact
。this.Text="22/11/2009";
DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null);
评论
为什么我们必须在此处传递null?
– Shantannu Gupta
2010-2-3在15:29
输入可以是“ 22/11/2009 12:00:00 AM”或“ 22/11/2009”。开发机器的文化也可能与生产文化不同。那么上述代码将无缝运行吗?
–拉赫塔尔
2012年2月24日在9:11
@Rahat,如果格式不匹配,则精确解析将不起作用。上面的格式模式是dd / MM / yyyy,因此其中带有时间的文本字符串将无法正确解析。您需要剥离时间或将其包含在格式模式中。 ParseExact的重载可以接受格式格式数组,如果匹配任何格式,则将解析文本。
–塞缪尔·内夫(Samuel Neff)
2012-2-27在2:22
@SamuelNeff如果您仍在定义格式,为什么不使用CultureInfo.InvariantCulture而不是当前的格式呢?
–黄永Al
13年3月25日在16:51
@Toolkit原因是格式字符串中的斜杠不是文字斜杠。在当前区域性中,它们由日期分隔符字符串替换。因此,它确实取决于上面编写方式的文化。塞缪尔·内夫(Samuel Neff),尝试Thread.CurrentThread.CurrentCulture = new CultureInfo(“ da-DK”);,它将破坏您的解决方案。要解决此问题,请使用“ dd'/'MM'/'yyyy”(用单引号保护斜杠)或@“ dd \ / MM \ / yyyy”(用斜杠“转义”)。
–杰普·斯蒂格·尼尔森(Jeppe Stig Nielsen)
15年7月27日在8:51
#2 楼
您需要调用ParseExact
,它解析与您提供的格式完全匹配的日期。例如:
DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
IFormatProvider
参数指定用于解析日期的区域性。除非字符串来自用户,否则应传递
CultureInfo.InvariantCulture
。如果字符串确实来自用户,则应传递
CultureInfo.CurrentCulture
,它将使用设置用户在“控制面板”的“区域选项”中指定的内容。评论
@Slaks:在代码中没有CultureInfo.InvariantCulture。我需要使用一些名称空间吗
– Shantannu Gupta
2010-2-3在15:31
使用System.Globalization;
–SL
2010-2-3在15:32
您也可以右键单击错误,然后单击“解决”,这将为您放入缺少的名称空间。
– Inkey
2014年1月8日在16:36
您还可以双击错误并看到一个向下箭头,显示可以使用的相关名称空间
–Usman Younas
2015年4月14日在7:17
空格也计算在内,例如,如果您的字符串格式为“ MM / dd / yyyy HH:mm:ss”(请注意-2个空格)-那么您的ParseExact格式还必须包含空格
–克里斯·哈克罗(Chris Halcrow)
17年7月4日在6:39
#3 楼
解析DateTime的字符串表示形式是一件棘手的事情,因为不同的区域性具有不同的日期格式。 .Net知道这些日期格式,并在调用System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat
时将它们从当前的区域性(DateTime.Parse(this.Text)
)中提取出来;例如,字符串“ 22/11/2009”与该字符串的ShortDatePattern不匹配。美国(en-US),但与法国(fr-FR)匹配。现在,您可以调用
DateTime.ParseExact
并传递您期望的确切格式字符串,也可以将适当的区域性传递给DateTime.Parse
来解析日期。例如,这将正确解析您的日期:DateTime.Parse( "22/11/2009", CultureInfo.CreateSpecificCulture("fr-FR") );
当然,您不仅应该随机选择法国,还应该选择适合您需要的东西。
您需要弄清楚
System.Threading.Thread.CurrentThread.CurrentCulture
的设置是什么,以及它是否/为什么与您的期望不同。评论
您的解决方案对我不起作用,它会显示类似“字符串未被识别为有效的DateTime”的错误。并且我将以下输入日期传递为:“ 13/06/17”到您的解决方案,但是它给出了error.Plz帮助我。
– Ghanshyam Lakhani
17年7月17日在7:32
#4 楼
尽管上述解决方案有效,但是您也可以使用以下方法修改webconfig文件...<configuration>
<system.web>
<globalization culture="en-GB"/>
</system.web>
</configuration>
Ref:与生产计算机相比,本地计算机上的日期时间格式
评论
阿米特·飞利浦(Amit Philips),您保存了我的一天。这个小小的改变是可行的。谢谢。
– RNH
13年7月26日在6:20
阿米特,你确实是上帝的儿子。
–愤怒的熊
2015年3月2日,12:21
#5 楼
您可能需要指定特定日期格式的区域性,例如: Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); //dd/MM/yyyy
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
有关更多详细信息,请访问此处:
http:// msdn.microsoft.com/zh-CN/library/5hh873ya.aspx
#6 楼
花了很多时间后,我解决了问题 string strDate = PreocessDate(data);
string[] dateString = strDate.Split('/');
DateTime enter_date = Convert.ToDateTime(dateString[1]+"/"+dateString[0]+"/"+dateString[2]);
评论
对我来说效果很好,我认为这是最好的答案,因为它可以同时处理带有日期和时区文本的日期,这意味着,如果其处理用户输入的数据,则可以处理各种格式
–院长
8月13日15:43
#7 楼
根据此参考,下一种方法对我有用:// e.g. format = "dd/MM/yyyy", dateString = "10/07/2017"
var formatInfo = new DateTimeFormatInfo()
{
ShortDatePattern = format
};
date = Convert.ToDateTime(dateString, formatInfo);
#8 楼
使用此命令将字符串转换为日期时间:Datetime DT = DateTime.ParseExact(STRDATE,"dd/MM/yyyy",System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat)
#9 楼
private DateTime ConvertToDateTime(string strDateTime)
{
DateTime dtFinaldate; string sDateTime;
try { dtFinaldate = Convert.ToDateTime(strDateTime); }
catch (Exception e)
{
string[] sDate = strDateTime.Split('/');
sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2];
dtFinaldate = Convert.ToDateTime(sDateTime);
}
return dtFinaldate;
}
#10 楼
就像上面的人说的那样,您可以将其作为字符串参数发送,但必须具有以下格式:例如“ 20130121”,您可以将其转换为直接从控件中获取的格式。因此,例如,您可以从以下文本框中获取它:date = datetextbox.text; // date is going to be something like: "2013-01-21 12:00:00am"
转换为:'20130121'您使用:
date = date.Substring(6, 4) + date.Substring(3, 2) + date.Substring(0, 2);
,以便SQL可以将其转换并将其放入您的数据库中。
#11 楼
您也可以使用this.Text = "22112009";
DateTime newDateTime = new DateTime(Convert.ToInt32(this.Text.Substring(4, 4)), // Year
Convert.ToInt32(this.Text.Substring(2,2)), // Month
Convert.ToInt32(this.Text.Substring(0,2)));// Day
#12 楼
在下面的代码中为我工作:DateTime date = DateTime.Parse(this.Text, CultureInfo.CreateSpecificCulture("fr-FR"));
命名空间
using System.Globalization;
#13 楼
手动更改:string s = date.Substring(3, 2) +"/" + date.Substring(0, 2) + "/" + date.Substring(6, 4);
从2015年11月22日起,它将在2015年11月22日进行转换
评论
@Edit:这就是文档的用途。 msdn.microsoft.com/zh-CN/library/w2sa9yss.aspx当您知道日期字符串的确切格式时,可以使用ParseExact;而当您想要某种可以处理更动态的内容时,则使用Parse。