繁体   English   中英

DateTime.TryParse 将十进制转换为日期时间

[英]DateTime.TryParse converts decimal to datetime

以下代码行返回 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
               );

那么successfalse的。

我从文档中的注释中注意到:

字符串s使用当前DateTimeFormatInfo object 中的格式信息进行解析,该信息由当前线程区域性隐式提供。

如果可能,此方法会尝试忽略无法识别的数据,并使用当前日期填充缺失的月、日和年信息。 如果 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'

如果将其更改为“1.0228”,它返回 true,是的。 看起来它使用的是“M.yyyy”格式,这无疑对某些文化有效......并强调了为什么在我看来使用DateTime.TryParse是个坏主意。 如果您有特定的格式(或格式集),您应该使用DateTime.TryParseExact代替,以便您可以指定格式。

我通常发现指定确切的格式是个好主意,而且我通常还会指定CultureInfo.InvariantCulture ,除非日期直接来自用户(根据我的经验,这种情况很少见)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM