2013-09-30 46 views
1

我有一个名为dtpDateSelection的DateTimePicker。当我选择日期时,我需要将日期分成两个变量。我需要Quarter等于日期所在的季度。而我需要Year等同于日期所在的年份。我以为我知道如何做到这一点,但我遇到了麻烦。这里是我试过的代码:找到DateTimePicker的季度选择日期

Dim Year As String = DatePart("yyyy", dtpDateSelection) 
Dim Quarter As String = DatePart("q", dtpDateSelection) 

这是我的错误:

Additional information: Argument 'DateValue' cannot be converted to type 'Date'.

回答

1

一个简单的解决方案:

Dim year As Integer = DateTimePicker.Value.Year 
Dim quarter As Integer = ((DateTimePicker.Value.Month - 1) \ 3) + 1 
+0

当我使用你的代码时,我得到两个重复的错误消息。错误消息说'引用非共享成员需要和对象引用' – gromit1

+1

使用'dtpDateSelection'或任何你命名的DateTimePicker的实例。 –

+0

我已经这样做了,它说月份不是会员。 – gromit1

1

所以,你必须从DateTimePicker.Value属性DateTime值。

使用,你可以检索日期的年份,像这样:

Dim year As Integer = DateTimePicker.Value.Year 

为了确定该季度的日期内,试试这个:

Public Shared Function DetermineQuarter(dateTime As DateTime) As Integer 
    If dateTime.Month <= 3 Then 
     Return 1 
    End If 

    If dateTime.Month <= 6 Then 
     Return 2 
    End If 

    If dateTime.Month <= 9 Then 
     Return 3 
    End If 

    Return 4 
End Function 

现在你可以拿到季度值如下:

Dim quarter As Integer = DetermineQuarter(DateTimePicker.Value) 
+1

好的解决方案,但为什么从月份减去3? –

+1

@DouglasBarbin - 改变逻辑来使用效用函数,而不是混淆,非工作模数和整数除法逻辑。 –

+1

模数不是必需的,但你可以用整数除法。看到我的答案。 –

1

正如其他人指出的,DateTime值有一个.Month成员。本季度,我一直用一个简单的选择功能

Dim quarter As Integer = Choose(DateTimePicker1.Value.Month, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4) 

除此之外,你的代码工作的两行,但你需要的。价值添加到dtpDateSelection结束。 DatePart函数第二个参数有一个Object类型,所以它可以让你传入一个控件(这就是你正在做的),但最终的结果将是一个错误。 .Value将其更改为在选取器中选择的日期。

Dim Year As String = DatePart("yyyy", dtpDateSelection.Value) 
Dim Quarter As String = DatePart("q", dtpDateSelection.Value) 
相关问题