`
jianghg2010
  • 浏览: 63950 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跨年周数计算

 
阅读更多
打印条码计算周数和年时,经常需要对跨年周的处理。 比如明年的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()));
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics