以下代码行返回true(实际上不应该),并将1.0228转换为日期时间格式...
DateTime.TryParse(1.0228,out temporaryDateTimeValue)
有人能帮我吗?
以下代码返回 true(不应该),并将 1.0228 转换为日期时间...
DateTime.TryParse(1.0228,out temporaryDateTimeValue)
这段代码无法编译。
然而,如果你将其用引号括起来(并进行一些清理),
bool success = DateTime.TryParse("1.0228", out temporaryDateTimeValue);
那么,是的,你会得到true
。你需要阅读文档来理解为什么,但基本上有许多不同的日期格式方式,而你可能碰巧在其中一种格式(也许是M.yyyy
)上犯了错。
如果你不想对其进行解析,我可以建议
bool success = DateTime.TryParseExact(
"1.0228",
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out temporaryDateTimeValue
);
然后success
为false
。
我从文档的注释中注意到:
使用当前线程区域性隐式提供的当前
DateTimeFormatInfo
对象中的格式信息解析字符串s
。如果可能,此方法尝试忽略无法识别的数据,并使用当前日期填充缺少的月份、日期和年份信息。如果
s
仅包含日期而没有时间,则此方法假定时间为午夜12:00。在s
中任何前导、内部或尾随的空格字符都会被忽略。日期和时间可以用一对前导和尾随数字标记字符('#',U + 0023)括起来,并且可以在其后跟随一个或多个NULL字符(U + 0000)。由于
DateTime.TryParse(String, DateTime)
方法尝试使用当前区域性的格式规则解析日期和时间的string
表示形式,因此尝试在不同的区域性中解析特定的string
可能会失败或返回不同的结果。如果将在不同的语言环境中解析特定的日期和时间格式,请使用DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime)
方法或TryParseExact
方法的其中一个重载,并提供格式说明符。
基本上,TryParse
非常努力地尝试解析您提供的字符串(虽然“Try
”实际上是指该方法返回了一个布尔值表示成功/失败的指示)。
不,那段代码并没有返回 true - 它甚至无法编译:
using System;
class Program
{
static void Main(string[] args)
{
DateTime dt;
Console.WriteLine(DateTime.TryParse(1.0228, out dt));
}
}
错误:
Test.cs(9,27): error CS1502: The best overloaded method match for
'System.DateTime.TryParse(string, out System.DateTime)' has some invalid
arguments
Test.cs(9,45): error CS1503: Argument 1: cannot convert from 'double' to
'string'
DateTime.TryParseExact
来指定格式。
DateTime.TryParse()
只应该有两个重载,而且这两个重载都不会将double
作为它们的第一个参数。 - Frédéric HamidiDateTime.TryParse(double, out DateTime)
的扩展方法在作用域内。Intellisense列出了多少个TryParse()
的重载? - Frédéric HamidiDateTime
。 - jason