我需要使用C#在ASP.net中执行一些日期操作。
我输入的日期应为格式'Jul-05'(mmm-yy格式和类型 - 字符串)... 我怎么能检查这个???? 或者我如何用任何用户输入字符串来验证这一点???
验证完毕后,我需要将其与数据库中的值进行比较(比如列名 buy_period ,其值为(例如)04/31/2007)。
如何编写查询以进行比较? (因为两个日期的格式不同)
你可以帮助我吗?
答案 0 :(得分:5)
DateTime myDateTime = DateTime.ParseExact( input, "MMM-yy" );
然后,您可以愉快地将它作为参数传递给存储过程(等),以便在服务器上进行比较(或者只使用作为现有查询结果返回的DateTime)
答案 1 :(得分:2)
.NET框架在DateTime struct :: Parse,TryParse,ParseExact,TryParseExact上有一些不错的方法。
此信息为discussed on MSDN。
因为你提供了一个自定义日期字符串,我们应该使用ParseExact或TryParseExact。如果解析失败,后者不会抛出异常。
所以..试试吧......
using System.Globalization;
CultureInfo MyCultureInfo = new CultureInfo("en-US");
string myString = "Jul-05";
DateTime myDateTime = DateTime.ParseExact(myString, "MMM-yy", MyCultureInfo))
Console.WriteLine();
然后可以将myDateTime值作为DateTime属性传递给数据库,并对其进行检查。
编辑:该死的,被罗兰击败了一分钟,就像我打字一样!编辑2:请注意“MMM-yy”。如MSDN page所述,MMM
是“表示当前System.Globalization.DateTimeFormatInfo.AbbreviatedMonthNames属性中定义的月份的缩写名称。” mmm
(小写)无效。
答案 2 :(得分:2)
使用TryParseExact
方法验证字符串并将其解析为DateTime
值:
DateTime month;
if (DateTime.TryParseExact("MMM-yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out month)) {
// parsing was successful
}
DateTime
值将使用月份的第一天和0:00的时间来填充完整的值,因此像"jul-05"
这样的字符串将被解析为完整的DateTime
价值如2005-07-01 00:00:00.0000
,因此它将成为该月的起点。
要将此与数据库中的日期进行比较,您还需要下个月的起点,您可以使用:
DateTime nextMonth = month.AddMonths(1);
现在,您可以通过以下方式将日期与月份的起点和终点进行比较:
where date >= @Month and date < @NextMonth
答案 3 :(得分:0)
2:列是日期时间还是varchar?
答案 4 :(得分:0)
你的验证和比较必须是两种不同的操作。所以你可以做很多事情进行验证。
验证选项:
1。)将字符串拆分为“ - ”并检查mmm部分是否在您的月份列表中,然后检查该数字是否有效。
2。)正则表达式,这是先进的,但可以减少到一行。如果您有兴趣,请查看RegEx。
验证字符串后,将其转换为DateTime对象,并使用DateTime.Compare()将其与其他值进行比较。
希望有所帮助。
答案 5 :(得分:0)
您可以使用
DateTime date = DateTime.ParseExact(value, "MMM-yy", null); //checked at http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
然后在sql命令参数中使用该日期。