2011-03-25 71 views
0

嘿,我有2个日期,我需要看到不同的日子。datediff帮助在vb.net

问题在于服务器日期不是正常的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)

大卫

回答

0

尝试

Dim curDate As Date = Now 
Dim srDate As Date = mid(dr(6),5,2) & "/" & right(dr(6),2) & "/" & left(dr(6),4) 
+0

工作。谢谢Beth! :O) – StealthRT 2011-03-28 12:31:15

2

尽量不要用锤子将一个正方形串挂成圆形日期孔,只是有太多的办法,打破你的木槌。现在函数已经返回了一个日期:

Dim curDate As Date = Now.Date 

选项严格在源代码文件的顶部可以帮助你找到这些类型的错误。

如果从服务器获取字符串(祈祷你不要),然后使用ParseExact()将日期转换:

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

你为什么现在格式化成这样?你可能只是这样做:

Dim curDate As Date = DateTime.Now.Date 
1

至于其他的海报说,你不需要格式化DateTime.Now。

但是还有其他地方出错了:Format返回string,并且您正试图将其分配给Date。它试图隐式转换一个字符串,并失败。

在未来,当你做日期字符串,如“年月日”变成一个DateTime类型,使用DateTime.Parse

1

你的问题是第一线;看起来你的项目中有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函数是一个好主意。

+0

**字符串未被株型识别为有效的DateTime ** – StealthRT 2011-03-28 12:14:29

+0

@StealthRD:你有没有空值? – 2011-03-28 12:53:22

1

首先:

  • “MM/DD/YYYY” 在世界上最,只有北美的不正常。
  • 中国使用“YYYY-MM-DD”。
  • 欧洲使用 “DD/MM/YYYY”

其次,如果你正在解析日期格式,可以通过格式字符串DateTime.Parse。在你的情况下,这是你需要做的。