毕设问题小记——日期的一些处理
在毕设过程出,多次遇到需要处理日期格式的地方,而今天需要根据周次编号、该周起始日期、周数生成之后每一周的起止时间,以用来判断当前系统所处阶段,因此打算花点时间写个简单的日期操作类。其中主要完成String、Date、Timestamp(默认情况下hibernate对于Mssql的date字段生成的Timestamp类型,对于mysql却生成的Date)相互转换,获取当前日期,计算当前日期相差某个天数后的日期(使用GregorianCalendar很容易实现)。代码如下:
package com.sxpt.util; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class DateOperater { /** * 字符转转DATE * @param date * @param format "yyyy-MM-dd" 或"yyyy-MM-dd hh:mm:ss" * @return */ static public Date StrToDate(String date,String format){ SimpleDateFormat sdf = new SimpleDateFormat(format); Date de=null; try { de=sdf.parse(date); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return de; } /** * DATE转字符转 * @param de * @param format format "yyyy-MM-dd" 或"yyyy-MM-dd HH:mm:ss" * @return */ static public String DateToString(Date de,String format){ String str=null; SimpleDateFormat sdf = new SimpleDateFormat(format); str=sdf.format(de); return str; } /** * date转Timestamp * @param de * @return */ static public Timestamp DateToTime(Date de){ String str=DateToString(de,"yyyy-MM-dd HH:mm:ss"); Timestamp ts=Timestamp.valueOf(str); return ts; } /** * Timestamp转Date * @param ts * @return */ static public Date TimeToDate(Timestamp ts){ Date de=new Date(); de=ts; return de; } /** * Timestamp转String * @param ts * @param format format "yyyy-MM-dd" 或"yyyy-MM-dd hh:mm:ss" * @return */ static public String TimeToStr(Timestamp ts,String format){ SimpleDateFormat sdf = new SimpleDateFormat(format); String str=sdf.format(ts); return str; } /** * 计算当前日期相差几天后的日期 * @param currentDate 当前日期 * @param num 相距天数 * @return */ static public Date getFurDate(Date currentDate,int num) { GregorianCalendar cal = new GregorianCalendar(); cal.setTime(currentDate); cal.add(GregorianCalendar.DATE, num);// 在日期上加7天 return cal.getTime(); } /** * 获取当前日期 * @return */ static public Date CurrentDate(){ Calendar ca = Calendar.getInstance(); int year = ca.get(Calendar.YEAR)-1900;//获取年份 int month=ca.get(Calendar.MONTH);//获取月份 System.out.println(month); int day=ca.get(Calendar.DATE);//获取日 int minute=ca.get(Calendar.MINUTE);//分 int hour=ca.get(Calendar.HOUR);//小时 int second=ca.get(Calendar.SECOND);//秒 Date de=new Date(year, month, day, hour, minute, second); return de; } }
下边是基于此实现的周次编号、该周起始日期、周数生成之后每一周的起止时间:
//beginweek:其实周次,begindate:该周起始日期,weeknum:计算周数
public void GetWeekDate(int beginweek,String begindate,int weeknum){ //计算起始时间 Date de=DateOperater.StrToDate(begindate+" 0:0:0", "yyyy-MM-dd HH:mm:ss"); //计算每周起止时间,生成记录 for(int i=beginweek;i<beginweek+weeknum;i++){ int tmpnum=(i-beginweek)*7; System.out.println(DateOperater.DateToTime(DateOperater.getFurDate(de, tmpnum))); System.out.println(DateOperater.DateToTime(DateOperater.getFurDate(de, tmpnum+7))); } }