Java 根据年号和第几周得到开始时间和结束时间

通常在做与时间相关的查询时,一个通用的做法是放入两个日历控件,一个是开始时间,一个是结束时间,用户在选择时间之后,校验时间合法性之后,就可以查询了,但在做小日本项目时遇到一个很奇葩的查询,这些用户不用开始时间结束时间,而是用这一年的第几周来查询出报表,个人觉得很不习惯,但还得做。

后台保留的时间格式是datetime类型的,而前台给出的条件是 年号 和第几周,比如 2014 年 第 5 周. 这个时候,你需要在后台用 Java 将 它转换成具体的开始时间,结束时间,然后再去数据库查询。转换的具体方法,分享如下 :
程序代码 程序代码

package com.training.controller;

import java.util.Calendar;

public class ConvertDateTest {
    
    public static void main(String[] args) {
        
        ConvertDateTest cd = new ConvertDateTest();
        System.out.println("开始时间: " + cd.getStartDayOfWeekNo(2014,5) );
        System.out.println("结束时间:" + cd.getEndDayOfWeekNo(2014,5) );    
        
    }
    
    /**
     * get first date of given month and year
     * @param year
     * @param month
     * @return
     */
    public String getFirstDayOfMonth(int year,int month){
        String monthStr = month < 10 ? "0" + month : String.valueOf(month);
        return year + "-"+monthStr+"-" +"01";
    }
    
    /**
     * get the last date of given month and year
     * @param year
     * @param month
     * @return
     */
    public String getLastDayOfMonth(int year,int month){
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR , year);
        calendar.set(Calendar.MONTH , month - 1);
        calendar.set(Calendar.DATE , 1);
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DAY_OF_YEAR , -1);
        return calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" +
               calendar.get(Calendar.DAY_OF_MONTH);
    }
    
    /**
     * get Calendar of given year
     * @param year
     * @return
     */
    private Calendar getCalendarFormYear(int year){
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);      
        cal.set(Calendar.YEAR, year);
        return cal;
    }
    
    /**
     * get start date of given week no of a year
     * @param year
     * @param weekNo
     * @return
     */
    public String getStartDayOfWeekNo(int year,int weekNo){
        Calendar cal = getCalendarFormYear(year);
        cal.set(Calendar.WEEK_OF_YEAR, weekNo);
        return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" +
               cal.get(Calendar.DAY_OF_MONTH);    
        
    }
    
    /**
     * get the end day of given week no of a year.
     * @param year
     * @param weekNo
     * @return
     */
    public String getEndDayOfWeekNo(int year,int weekNo){
        Calendar cal = getCalendarFormYear(year);
        cal.set(Calendar.WEEK_OF_YEAR, weekNo);
        cal.add(Calendar.DAY_OF_WEEK, 6);
        return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" +
               cal.get(Calendar.DAY_OF_MONTH);    
    }

}



运行得到 2014 年第 5 周的开始时间和结束时间:
程序代码 程序代码

开始时间: 2014-1-27
结束时间:2014-2-2



除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: java
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.