vb.net中的datediff帮助

vb.net中的datediff帮助,vb.net,visual-studio-2010,datetime,datediff,Vb.net,Visual Studio 2010,Datetime,Datediff,嘿,我有两个约会,我需要看看不同的日子 问题是服务器日期不是正常的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 "2011032

嘿,我有两个约会,我需要看看不同的日子

问题是服务器日期不是正常的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
源代码文件顶部的选项Strict On可帮助您找到这些类型的错误

如果从服务器获取字符串(请不要),请使用ParseExact()转换日期:

    Dim curDate As Date = Date.ParseExact(serverValue, "yyyyMMdd", Nothing)

试着不要把一个方形的线桩锤入一个圆形的日期孔中,因为有太多的方法可以打破你的木槌。Now函数已返回一个日期:

    Dim curDate As Date = Now.Date
源代码文件顶部的选项Strict On可帮助您找到这些类型的错误

如果从服务器获取字符串(请不要),请使用ParseExact()转换日期:

    Dim curDate As Date = Date.ParseExact(serverValue, "yyyyMMdd", Nothing)

你为什么现在这样格式化?你可以这样做:

Dim curDate As Date = DateTime.Now.Date

你为什么现在这样格式化?你可以这样做:

Dim curDate As Date = DateTime.Now.Date

正如其他海报所说,您不需要立即格式化DateTime.Now

但是这里还有一些问题:
格式
返回一个
字符串
,您正试图将其分配给一个
日期
。它试图隐式转换字符串,但失败了


将来,如果要将日期字符串(如“yyyyMMdd”)转换为日期时间类型,请使用

,正如其他海报所说,现在不需要格式化DateTime.Now

但是这里还有一些问题:
格式
返回一个
字符串
,您正试图将其分配给一个
日期
。它试图隐式转换字符串,但失败了


将来,当您将“yyyyMMdd”这样的日期字符串转换为日期时间类型时,请使用

您的问题是第一行;您的项目中似乎关闭了
选项Strict
(遗憾!),否则它根本无法编译

Format(现在是“yyyyMMdd”)
将以这种方式将当前日期格式化为字符串。问题在于,您试图将该输出(字符串)分配给
日期
变量。由于禁用了
选项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函数。

您的问题是第一行;您的项目中似乎关闭了
选项Strict
(遗憾!),否则它根本无法编译

Format(现在是“yyyyMMdd”)
将以这种方式将当前日期格式化为字符串。问题在于,您试图将该输出(字符串)分配给
日期
变量。由于禁用了
选项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函数。

首先:

  • “MM/DD/YYYY”在世界上大部分地区都不正常,只有北美地区
  • 中国使用“YYYY-MM-DD”
  • 欧洲使用“DD/MM/YYYY”
其次,如果要解析已知的日期格式,可以将格式字符串传递给
DateTime.Parse
。在您的情况下,这就是您需要做的。

首先:

  • “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)
试一试


字符串未被识别为有效字符串DateTime@StealthRD:是否有空值?字符串未被识别为有效字符串DateTime@StealthRD:您有空值吗?