我搜索了SO,但无法找到对我有用的回复。
我在c#中有一个dateTime值,我想检查它是否有一个有效值。例如,如果将以下值传递给datetimeupdate(类型为datetime),我应该能够抛出一个异常。 / p>
datetimeupdate= 2015-07-29T19:55:10.994sdfsdf
我尝试使用Tryparse,但它接受字符串作为第一个参数。但datetimeupdate参数的类型为datetime。我不知道如何检查参数是否有效值。
我无法进行前端验证,因为这是在WebAPI中,这就是我得到的值(使用无效字符)
答案 0 :(得分:1)
你有一个日期时间的字符串表示。您可以使用下面的TryParse()
方法;如果解析成功,它将返回TRUE
。
static void Main(string[] args)
{
string str = "2015-07-29T19:55:10.994sdfsdf";
Console.WriteLine(IsvalidDateTime(str));
}
static bool IsvalidDateTime(string date)
{
DateTime dt;
return DateTime.TryParse(date, out dt);
}
答案 1 :(得分:0)
using System;
public class Program
{
public static void Main()
{
try
{
string d = "2015-07-29T19:55:10.994sdfsdf";
DateTime dt = Convert.ToDateTime(d);
Console.WriteLine(dt);
}
catch(FormatException)
{
Console.WriteLine(" Date is InValid ");
}
}
}
答案 2 :(得分:0)
DateTime
在不同国家/地区之间进行了非常广泛的格式化。
例如,在瑞典,我们遵循ISO 8601
- 格式 - yyyy-MM-dd
。在美国,标准格式为M/d yyyy
关于日期的“有效性”;很难说
有人可能会将日期描述为2015-07-29T19:55:10.994sdfsdf
。
如果您的程序可以处理(并解析)该输入,那么它可能是有效的。
解决您问题的最简单方法是使用DateTime.Parse
或DateTime.TryParseExact
(如果您知道日期的格式)
string dateString = "2015-07-30 18:00:00.142"
string dateFormat = "yyyy-MM-dd HH:mm:ss.fff"
DateTime parsedDate;
bool parseSuccess = DateTime.TryParseExact(
s: dateString,
format: dateFormat,
provider: CultureInfo.CurrentCulture,
style: DateTimeStyles.None,
result: out parsedDate
);
if (parseSuccess)
{
// valid
}
else
{
// not valid
}
如果DateTime
的字符串表示格式未知,您可以使用DateTime.Parse
或DateTime.TryParse
。
string dateString = "2015-07-30 18:00:00.142"
DateTime parsedDate;
if (DateTime.TryParse(dateString, out parsedDate))
{
// valid
}
else
{
// not valid
}
然而,即使使用相当广泛 - 这些也无法保证解析“正确”日期,因为最终用户可能以不同于预期的格式输入日期。而你最终可能会花费几个月的时间;这可能会产生一些意想不到的后果。
有些阅读