- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果之前有人问过这个问题,我深表歉意。我有一些数据需要存储为字符串,其中一些数据是日期。数据以字符串形式开始,例如“01/02/10”(英国格式)。现在,稍后会解析此数据,并且根据解析的内容,结果会有所不同(例如,2010 年 2 月 1 日与 10 年 1 月 2 日)。鉴于数据以字符串形式开始,在我存储它之前我想说,“如果这看起来像一个日期,请将其格式化为 dd-mmm-yy”。
问题是很多东西看起来像 DateTime.Parse() 函数的日期。
因此,我应用了一些规则,只接受“合理”的日期格式进行支票,并编写了一个 IsDate() 函数。我正在寻求有关如何执行此操作的建议,因为虽然它有效,但我的解决方案似乎非常笨拙。
如果您曾经开始向它抛出随机字符串(例如“3/4”和“6.12”),那么我这样做而不是按照通常的 DateTime.TryParse 例程进行操作的全部原因就很清楚了。
这是我目前所拥有的:
class Program
{
static void Main(string[] args)
{
Debug.Assert(IsDate(6.12) == false);
Debug.Assert(IsDate("3/4") == false);
Debug.Assert(IsDate(010210) == false);
Debug.Assert(IsDate("010210") == false);
Debug.Assert(IsDate("12-jan-2000") == true);
Debug.Assert(IsDate("12-12-20") == true);
Debug.Assert(IsDate("1/1/34") == true);
Debug.Assert(IsDate("09/30/20") == false);
Debug.Assert(IsDate(DateTime.Now) == true);
}
static Boolean IsDate(Object value)
{
DateTimeFormatInfo DateTimeFormatGB = new CultureInfo("en-GB").DateTimeFormat; // new CultureInfo("en-US").DateTimeFormat;
return IsDate(value, DateTimeFormatGB);
}
static private List<String> AcceptableDateFormats = new List<String>(72);
static Boolean IsDate(Object value, DateTimeFormatInfo formatInfo)
{
if (AcceptableDateFormats.Count == 0)
{
foreach (var dateFormat in new[] { "d", "dd" })
{
foreach (var monthFormat in new[] { "M", "MM", "MMM" })
{
foreach (var yearFormat in new[] { "yy", "yyyy" })
{
foreach (var separator in new[] { "-", "/" }) // formatInfo.DateSeparator ?
{
String shortDateFormat;
shortDateFormat = dateFormat + separator + monthFormat + separator + yearFormat;
AcceptableDateFormats.Add(shortDateFormat);
AcceptableDateFormats.Add(shortDateFormat + " " + "HH:mm"); // formatInfo.TimeSeparator
AcceptableDateFormats.Add(shortDateFormat + " " + "HH:mm:ss");
}
}
}
}
}
String sValue = value.ToString().Trim();
DateTime unused;
foreach (String format in AcceptableDateFormats)
{
if (DateTime.TryParseExact(sValue, format, formatInfo, DateTimeStyles.None, out unused) == true) return true;
}
return false;
}
}
我没有使用区域性信息中的日期/时间分隔符,因为我想同时接受“/”和“-”。我想我本可以使用时间,因为这不太可能改变(对我而言)。
最佳答案
你检查了吗DateTime.TryParse()的替代覆盖,它可以让您更好地控制它认为是约会的内容?
关于c# - 在 C# 中编写等效的 IsDate()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3942490/
为什么 IsDate("13.50") 返回 True 而 IsDate("12.25.2010") 返回 False? 最佳答案 我最近被这个小“功能”绊倒了,希望提高人们对 VB 和 VBA 中
刚注意到isDate不适用于 arrayformula . 案件 如果日期要过滤所有值: 使用公式: =FILTER(data,ISDATE(data)) 预期结果: 8/28/2018 得到了: #
这个问题已经有答案了: What is the significance of 1/1/1753 in SQL Server? (6 个回答) 已关闭 6 年前。 MS 文档指出 ISDATE() R
我有一张表,需要验证某个列是否只包含日期。我正在尝试计算不遵循日期格式的记录数。如果我检查一个未定义为“日期”类型的字段,则查询有效。但是,当我检查我定义为日期的字段时,它没有。 询问: SELECT
我有这样的日期字符串 2010 年 5 月 1 日到 2016 年 8 月 15 日。我只想在我的函数中将其作为日期字符串进行检查,而不是继续执行函数。当我检查这个时带有 new Date(value
当用户在文本框中输入日期 05/04 并按 Enter 时,我使用以下代码来检查它是否是日期。代码是 window.execScript("dim successReturn:successRetu
我有一行 SQL Server 代码,它采用列为“YYYYMMDD”的日期,其中 DD 为 00,并将 00 转换为 01,以便它与日期时间一起使用。我希望能够为此使用 MySQL 适用于 SQL 服
IsDate 函数 返回 Boolean 值指明某表达式是否可以转换为日期。 IsDate(expression) expression 参数可以是任意可被识别为日期和时间的日期表达式或字符串
DB2 版本为 9.7.0.7 我有一个平面文件,需要在插入生产表之前进行充分验证。为了分析,我将其解析为一个表,其中所有列都是 VARCHAR . 其中一项任务是验证日期。我需要能够找到具体的无效日
我正在针对从 Excel 文件导入的数据运行 SQL 语句。在此 SQL 中,我使用 IsDate 函数检查用户是否正确输入了日期。由于这是尚未转换的原始数据,因此所有日期都存储在 varchar 数
我正在尝试检查一个值是否是这样的日期: var input = "2014-04-01T15:22:30.000Z"; var dateTime = { year: $filter('date
这个问题在这里已经有了答案: Unable to convert MySQL date/time value to System.DateTime.Couldn't store 0/0/0000 0
我对 Calendar.current.isDate 这个函数有疑问。 let calendar = Calendar.current print("locale : \(calendar.loc
如果之前有人问过这个问题,我深表歉意。我有一些数据需要存储为字符串,其中一些数据是日期。数据以字符串形式开始,例如“01/02/10”(英国格式)。现在,稍后会解析此数据,并且根据解析的内容,结果会有
在加载到目标数据库之前,有什么方法可以在从源文件提取后检查 SSIS 包派生列表达式中的日期(如 TSQL 中的 isDate 函数)列吗? 谢谢 最佳答案 没有内置函数,但您可以运行脚本任务并使用
在加载到目标数据库之前,有什么方法可以在从源文件提取后检查 SSIS 包派生列表达式中的日期(如 TSQL 中的 isDate 函数)列吗? 谢谢 最佳答案 没有内置函数,但您可以运行脚本任务并使用
我想将所有非日期格式的字符串更改为日期 nil,然后更改列类型。我曾计划使用以下内容: class SetSubmitDateForAllMyTables select '1/2/2015'::da
我知道有一个函数叫 ISDATE验证 DATETIME列,但它仅适用于 SMALLDATETIME和 DATETIME类型。 是否有类似的方法来验证新的数据类型 DATETIME2在 SQL Serv
Declare @var varchar(100) set @var = '2000' select case when ISDATE(@var) = 1 then '
因此,我查看了 SQL Server 中 ISDATE() 函数的文档,并在示例中看到了这一点: SET DATEFORMAT mdy; SELECT ISDATE('15/04/2008'); --
我是一名优秀的程序员,十分优秀!