跨年周数计算

打印条码计算周数和年时,经常需要对跨年周的处理。 比如明年的1月1日和2日,根据工厂的要求,就要求计算在上一年的周数里。下面的程序可以实现此功能,如果1月1号是周四、五、六、日,就算在2011年,否则算在2010年。

private string GetYearAndWeekString()
{
string strWeek;
string strYear;

DateTime dtCurrentTime = DateTime.Now;
DateTime dtFirstDayOfYear = new DateTime(dtCurrentTime.Year, 1, 1); //1月1日
int nYear = dtCurrentTime.Year;

dtCurrentTime = dtCurrentTime.AddHours(-9);

int nWeekNum = 1;


//如果1月1日是周4、5、6、日,//算到上一年
if (dtFirstDayOfYear.DayOfWeek == DayOfWeek.Thursday ||
dtFirstDayOfYear.DayOfWeek == DayOfWeek.Friday ||
dtFirstDayOfYear.DayOfWeek == DayOfWeek.Saturday ||
dtFirstDayOfYear.DayOfWeek == DayOfWeek.Sunday)
{
nWeekNum = 0;

//第一周有几天
int nFisrtWeekDays = 0;
while (dtFirstDayOfYear.DayOfWeek != DayOfWeek.Monday)
{
nFisrtWeekDays++;
dtFirstDayOfYear = dtFirstDayOfYear.AddDays(1);
}

//特殊情况:如果今天在第一周里,上一年周数加1
if (dtCurrentTime.DayOfYear <= nFisrtWeekDays)
{
nYear -= 1;
dtCurrentTime = new DateTime(nYear,12,31);
while (dtCurrentTime.DayOfYear > 1)
{
if (dtCurrentTime.DayOfWeek == DayOfWeek.Monday)
nWeekNum++;
dtCurrentTime = dtCurrentTime.AddDays(-1);
}

strWeek = (nWeekNum + 1).ToString("D2");
strYear = UserHelper.strYearCode[nYear - 2009];

return strWeek + strYear;
}

}
else
{
nWeekNum = 1; //算到当前年
}


//数周数
while (dtCurrentTime.DayOfYear > 1)
{
if (dtCurrentTime.DayOfWeek == DayOfWeek.Monday)
nWeekNum++;
dtCurrentTime = dtCurrentTime.AddDays(-1);
}


strWeek = nWeekNum.ToString("D2");

//year code
strYear = UserHelper.strYearCode[nYear - 2009];

return strWeek + strYear;
}


==================================
//已知某年ryear 自然周rweek,计算该周的第一天对应的日期
SimpleDateFormat temp_DateFormat = new SimpleDateFormat( "yyyy-MM-dd ");
Calendar temp_cal1 = Calendar.getInstance();
//只设置了年和周的field,生成的日历会以当前日期是星期几来设置日历的星期
temp_cal1.set(Calendar.YEAR, Integer.valueOf(this.ryear));
temp_cal1.set(Calendar.WEEK_OF_YEAR, Integer.valueOf(this.rweek));
//减去星期几对应的数字,就会得出该周第一日(即星期天)对应的日期。如星期一对应了2,就减1天
temp_cal1.add(Calendar.DAY_OF_MONTH, -(temp_cal1.get(Calendar.DAY_OF_WEEK))+1);//
System.out.println(temp_DateFormat.format(temp_cal1.getTime()));

你可能感兴趣的:(跨年周数计算)