vb.net中的datediff帮助
嘿,我有两个约会,我需要看看不同的日子 问题是服务器日期不是正常的MM/DD/YYYY格式。格式为YYYYMMDD 我尝试了以下方法: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
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:您有空值吗?