计算本季度和上季度的StartDate和EndDate

时间:2009-02-20 02:27:15

标签: asp.net asp.net-2.0 asp.net-3.5

我需要在vb.net中计算当前季度和上一季度的StartDate和EndDate。

3 个答案:

答案 0 :(得分:12)

我知道您指定了VB.Net,但我更愿意在C#中编写未编译的代码。我确信有人可以在必要时翻译。

public static DateTime QuarterEnd() {
    DateTime now = DateTime.Now;
    int year = now.Year;
    DateTime[] endOfQuarters = new DateTime[] {
        new DateTime(year, 3, 31),
        new DateTime(year, 6, 30),
        new DateTime(year, 9, 30),
        new DateTime(year, 12, 31)
    };
    return endOfQuarters.Where(d => d.Subtract(now).Days >= 0).First();
}

我比其他涉及模运算和丑条件的解决方案更喜欢这个解决方案,因为它很容易被修改以处理非标准的季度定义。 QuarterStart方法的定义类似地处理,并留给亲爱的读者练习。或者,您可以修改此方法以返回包含所需开始和结束日期的struct

编辑,添加了以上C#的代码 / Stefan的VB.Net版本:

Public Function QuarterEnd() As Date
    Dim endOfQuarters As Date() = New Date() { _
        New Date(Now.Year, 3, 31), _
        New Date(Now.Year, 6, 30), _
        New Date(Now.Year, 9, 30), _
        New Date(Now.Year, 12, 31)}
    Return endOfQuarters.Where(Function(d) d.Subtract(Now).Days >= 0).First()
End Function

答案 1 :(得分:3)

原谅我缺少一个特定于VB.net的答案,但给出了一些日常对象,其中包含一些伪语言中的各种函数(基于零的日期和月份索引)......

//round the current month number down to a multiple of 3
ThisQuarterStart = DateFromYearMonthDay(Today.Year,Today.Month-(Today.Month%3),0);
//round the current month number up to a multiple of 3, then subtract 1 day
ThisQuarterEnd = DateFromYearMonthDay((Today.Month<9)?(Today.Year):(Today.Year+1),(Today.Month-(Today.Month%3)+3)%12,0) - 1;
//same as above, but minus 3 months
LastQuarterStart = DateFromYearMonthDay((Today.Month<3)?(Today.Year-1):(Today.Year),(Today.Month-(Today.Month%3)+9)%12,0)
LastQuarterEnd = ThisQuarterStart - 1;

编辑转换为以上伪代码转换为工作VB.Net: / Stefan

Dim ThisQuarterStart As Date = New Date(Today.Year, Today.Month - (Today.Month Mod 3) + 1, 1)  
Dim ThisQuarterEnd As Date = New Date(CInt(IIf(Today.Month < 9, Today.Year, Today.Year + 1)), (Today.Month - (Today.Month Mod 3) + 3 Mod 12) + 1, 1).AddDays(-1)
Dim LastQuarterStart As Date = New Date(CInt(IIf(Today.Month < 3, Today.Year - 1, Today.Year)), (Today.Month - (Today.Month Mod 3) + 9 Mod 12) + 1, 1)
Dim LastQuarterEnd As Date = ThisQuarterStart.AddDays(-1)

答案 2 :(得分:2)

vb.net转换需要更改。 将其更改为vb 6,它应该读取;

ThisQuarterStart = DateSerial(today.Year,today.Month - (IIf(today.Month Mod 3 = 0,3,today.Month Mod 3))+ 1,1)

ThisQuarterEnd = DateSerial(CInt(IIf(today.Month&lt; 9,today.Year,today.Year + 1)),((今天.Month - (IIf)今天.Month Mod 3 = 0,3,今天.Month Mod 3))+ 3)Mod 12)+ 1,1)-1

相关问题