[英]datediff help in vb.net
嘿,我有2个约会需要查看不同的日子。
问题是服务器日期不是正常的MM / DD / YYYY格式。 格式为YYYYMMDD 。
我尝试了以下方法:
Dim curDate As Date = Format(Now, "yyyyMMdd")
Dim srDate As Date = dr(6)
Dim M As Long = DateDiff(DateInterval.Weekday, curDate, srDate)
curDate具有以下错误:
Conversion from string "20110325" to type 'Date' is not valid.
任何帮助将是巨大的! :o)
大卫
尽量不要将方形的弦钉锤入一个圆形的日期孔,否则有太多的方法会打断槌。 Now函数已经返回一个日期:
Dim curDate As Date = Now.Date
源代码文件顶部的Option Strict On可帮助您发现这些错误。
如果从服务器获取字符串(请不要这样做),请使用ParseExact()转换日期:
Dim curDate As Date = Date.ParseExact(serverValue, "yyyyMMdd", Nothing)
您为什么要像现在这样格式化? 您可以这样做:
Dim curDate As Date = DateTime.Now.Date
正如其他张贴者所说的那样,您不需要格式化DateTime.Now。
但是这里还有其他问题: Format
返回一个string
,并且您试图将其分配给Date
。 它试图隐式转换字符串,但失败了。
将来,当您确实有一个日期字符串(如“ yyyyMMdd”)转换为DateTime类型时,请使用DateTime.Parse
您的问题是第一行; 看来您的项目中已禁用Option Strict
(FOR SHAME!),否则根本无法编译。
Format(Now, "yyyyMMdd")
将产生以字符串形式格式化的当前日期。 问题在于您试图将输出(字符串)分配给Date
变量。 由于关闭了Option Strict
,编译器会隐式指示此转换,并且运行时正尝试将非标准日期字符串转换回日期。 这是失败的。
尽可能少地更改您的代码,它应显示为:
Dim curDate As Date = Now.Date
Dim srDate As Date = DateTime.ParseExact(dr(6).ToString(), "yyyyMMDD", CultureInfo.InvariantCulture).Date
Dim M As Long = DateDiff(DateInterval.Weekday, curDate, srDate)
步骤0: 开启严格的选项
没有理由在关闭此选项的情况下编写新代码。 关闭编译器时,很容易在编译时(如此)捕获运行时错误。 此功能应完全从语言中删除。
步骤1:采用标准.NET类型和功能
尽管这不是必需的 ,但它将使您的代码对其他开发人员更具可读性,而其他开发人员的代码对您更具可读性。 诸如Format
, DateDiff
, Now
等之类的东西都是VB特定的功能,它们的存在主要是为了使经典VB6应用程序更易于移植到.NET。 除非有特殊原因要使用特定于语言的版本,否则最好使用标准.NET函数。
首先:
其次,如果要解析已知的日期格式,则可以将格式字符串传递给DateTime.Parse
。 在您的情况下,这就是您需要做的。
尝试
Dim curDate As Date = Now
Dim srDate As Date = mid(dr(6),5,2) & "/" & right(dr(6),2) & "/" & left(dr(6),4)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.