繁体   English   中英

vb.net中的datediff帮助

[英]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类型和功能

尽管这不是必需的 ,但它将使您的代码对其他开发人员更具可读性,而其他开发人员的代码对您更具可读性。 诸如FormatDateDiffNow等之类的东西都是VB特定的功能,它们的存在主要是为了使经典VB6应用程序更易于移植到.NET。 除非有特殊原因要使用特定于语言的版本,否则最好使用标准.NET函数。

首先:

  • “ MM / DD / YYYY”在世界上大多数地区都是不正常的,只有北美地区是不正常的。
  • 中国使用“ YYYY-MM-DD”。
  • 欧洲使用“ DD / MM / YYYY”

其次,如果要解析已知的日期格式,则可以将格式字符串传递给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.

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