Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime.TryParse发行,日期为yyyy dd MM格式_C#_Asp.net_Datetime_Date_Tryparse - Fatal编程技术网

C# DateTime.TryParse发行,日期为yyyy dd MM格式

C# DateTime.TryParse发行,日期为yyyy dd MM格式,c#,asp.net,datetime,date,tryparse,C#,Asp.net,Datetime,Date,Tryparse,我有以下字符串格式的日期“2011-29-01 12:00 am”。现在,我尝试使用以下代码将其转换为datetime格式: DateTime.TryParse(dateTime, out dt); 但是我总是以{1/1/0001 12:00:00 am}的形式获得dt,你能告诉我为什么吗?如何将该字符串转换为日期 编辑:我刚刚看到大家提到使用格式参数。现在我要提到的是,我不能使用format参数,因为我有一些设置来选择用户想要的自定义日期格式,并且基于该设置,用户可以通过jQuery da

我有以下字符串格式的日期“2011-29-01 12:00 am”。现在,我尝试使用以下代码将其转换为datetime格式:

DateTime.TryParse(dateTime, out dt); 
但是我总是以{1/1/0001 12:00:00 am}的形式获得dt,你能告诉我为什么吗?如何将该字符串转换为日期

编辑:我刚刚看到大家提到使用格式参数。现在我要提到的是,我不能使用format参数,因为我有一些设置来选择用户想要的自定义日期格式,并且基于该设置,用户可以通过jQuery datepicker以该格式在文本框中自动获取日期。

来自msdn:

类型:System.DateTime%此方法返回时,包含DateTime 值,该值等于s中包含的日期和时间,如果 转换成功,如果转换失败,MinValue。这个 如果s参数为null,为空字符串(“”),则转换失败, 或不包含日期和时间的有效字符串表示形式。 此参数在未初始化的情况下传递

将parseexact与格式字符串“yyyy-dd-MM hh:MM-tt”一起使用。您需要使用。它将字符串作为第二个参数,指定日期时间的格式,例如:

// Parse date and time with custom specifier.
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
try
{
   result = DateTime.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("{0} is not in the correct format.", dateString);
}
如果用户可以在UI中指定格式,则需要将其转换为可以传递到此方法的字符串。您可以通过允许用户直接输入格式字符串(尽管这意味着转换更可能失败,因为他们将输入无效的格式字符串)或使用组合框向他们显示可能的选项,然后为这些选项设置格式字符串来实现此目的

如果输入可能不正确(例如用户输入),最好使用
TryParseExact
而不是使用异常来处理错误情况:

// Parse date and time with custom specifier.
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
DateTime result;
if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out result))
{
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
else
{
   Console.WriteLine("{0} is not in the correct format.", dateString);
}
更好的选择可能是不向用户提供日期格式的选择,而是使用:


如果您从配置文件或数据库中读取可能的格式,那么您可以在遇到人们希望输入日期的所有不同方式时添加这些格式。

这应该基于您的示例“2011-29-01 12:00 am”

这是有效的:

DateTime dt = DateTime.ParseExact("2011-29-01 12:00 am", "yyyy-dd-MM hh:mm tt", System.Globalization.CultureInfo.InvariantCulture);

如果用户有机会更改日期/时间格式,则必须创建相应的格式字符串以用于解析。如果您知道可能的日期格式(即,用户必须从列表中选择),那么这就容易多了,因为您可以在编译时创建这些格式字符串


如果让用户自由设计日期/时间格式,则必须在运行时创建相应的
DateTime
格式字符串。

尝试使用安全的TryParseExact方法

DateTime temp;
string   date = "2011-29-01 12:00 am";

DateTime.TryParseExact(date, "yyyy-dd-MM hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out temp);

比我快。如果您知道输入字符串的格式,那么实际上应该始终使用TryParseExact/ParseExact方法。好的,因此我的日期格式与示例中的格式类似,但是如果日期或月份值是一位数,那么DateTime解析器将抛出一个错误,因为它在只有一位数的情况下查找两位数。在这种情况下,您有什么建议?回答我自己的问题,在这种情况下,如果您在格式中使用单个字符,则它适用于单字符和双字符日期。e、 g.d/m/yyyy 11月13日的工程/2012@BrokenGlass这对我没用,你能帮我吗this@CiaranGallagher只是一个小注释,注释中的日期应该使用大M(d/M/yyy)。顺便说一下,您可以通过检查
TryParse
的返回值来确定转换是否失败。这就是
bool success=DateTime.TryParse(…)。没错,如果让用户对日期/时间格式进行自由格式设计,则必须在运行时创建相应的日期时间格式字符串。
DateTime dt = DateTime.ParseExact("2011-29-01 12:00 am", "yyyy-dd-MM hh:mm tt", System.Globalization.CultureInfo.InvariantCulture);
DateTime temp;
string   date = "2011-29-01 12:00 am";

DateTime.TryParseExact(date, "yyyy-dd-MM hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out temp);
DateTime dt = DateTime.ParseExact("11-22-2012 12:00 am", "MM-dd-yyyy hh:mm tt", System.Globalization.CultureInfo.InvariantCulture);