[英]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
);
那么success
是false
的。
我從文檔中的注釋中注意到:
字符串
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.