今天周五,闲着也没什么事做,就想总结一下以前遇到的一些小问题,也算是强化一下编码能力和基础知识掌握程度吧!在我们开发的过程中,时常会遇到一些日期的处理,这是怎么也避免不了的,对于这些问题,对于一个新手来说还真是一个棘手的问题,因为当初我就为它愁过。当然,对于已经上班工作的程序员来说,解决这样的问题应当是随手拈来,不能被这样的小问题困扰了。再说,对于日期的转换我们可以采取两种处理方法:
1.在sql语句中使用转换函数解决(Oracle数据库)。
已经在http://blog.csdn.net/wangbaoyin/article/details/7750354里面有详细的说明了!
2.用java代码转换完成后存入数据库。
今天我们就主要谈一谈第二种方法,在真正上手之前我们先熟悉一下Date这个类和DateFormat类。
java.lang.Object
java.util.Date
java.sql.Date
java.lang.Object
java.text.Format
java.text.DateFormat
java.text.SimpleDateFormat
然后我们就写一个类来测试一下:
package example; import java.util.*; import java.text.*; public class dateTest{ // 日期格式,年份,例如:2004,2008 public static final String DATE_FORMAT_YYYY = "yyyy"; // 日期格式,年份和月份,例如:200707,200808 public static final String DATE_FORMAT_YYYYMM = "yyyyMM"; // 日期格式,年月日,例如:20050630,20080808 public static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd"; // 日期格式,年月日,用横杠分开,例如:2006-12-25,2008-08-08 public static final String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd"; // 日期格式,年月日时分秒,例如:20001230120000,20080808200808 public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISS = "yyyyMMddHHmmss"; // 日期格式,年月日时分秒,年月日用横杠分开,时分秒用冒号分开, // 例如:2005-05-10 23:20:00,2008-08-08 20:08:08 public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS = "yyyy-MM-dd HH:mm:ss"; /** * 字符串转换为日期 * * @author wangbaoyin * @param String strDate:日期的字符串形式 * @param String format:转换格式 * @return String * @throws */ public static Date strToDate(String strDate, String format) { SimpleDateFormat dateFormat = new SimpleDateFormat(format); Date date = null; try { date = dateFormat.parse(strDate); } catch (ParseException e) { e.printStackTrace(); } return date; } /** * 字符串转换为日期时间 * * @author wangbaoyin * @param String strDateTime:日期时间的字符串形式 * @param String format:转换格式 * @return String * @throws */ public static Date strToDateTime(String strDateTime, String fromat) { SimpleDateFormat dateTimeFormat = new SimpleDateFormat(fromat); Date dateTime = null; try { dateTime = dateTimeFormat.parse(strDateTime); } catch (ParseException e) { e.printStackTrace(); } return dateTime; } /** * 日期转换为字符串 * * @author wangbaoyin * @param Date date:需要转换的日期 * @param String format:转换格式 * @return String * @throws */ public static String dateToStr(Date date, String format) { SimpleDateFormat dateFormat = new SimpleDateFormat(format); return dateFormat.format(date); } /** * 日期时间转换为字符串 * * @author wangbaoyin * @param Date date:需要转换的日期 * @param String format:转换格式 * @return String * @throws */ public static String dateTimeToStr(Date date, String format) { SimpleDateFormat dateTimeFormat = new SimpleDateFormat(format); return dateTimeFormat.format(date); } /** * 得到当天的最后时间,today是字符串类型"yyyy-mm-dd", 返回是日期类型"yyyy-mm-dd 23:59:59" * * @author wangbaoyin * @param String today * @return Date * @throws */ public static Date getTodayLastTime(String today) { String todayLastTime = today + " 23:59:59"; return strToDateTime(todayLastTime, DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS); } // 主函数测试 public static void main(String[] args) throws Exception { // ////////////////////////////////////////////////////日期转换字符串测试 Date date = new Date(); String dateStr = ""; // 获得DateFormat对象 DateFormat df = DateFormat.getDateInstance(); // 把日期转换成为字符串格式为yyyy-mm-dd String s = df.format(date); // 根据给定的正则表达式的匹配来拆分此字符串 String ss[] = s.split("-"); for (int i = 0; i < ss.length; i++) { dateStr = dateStr + ss[i]; } dateStr = dateStr + String.valueOf(date.getHours()) + String.valueOf(date.getMinutes()) + String.valueOf(date.getSeconds()); System.out.println("日期转换字符串1:" + dateStr); String dateStr2 = dateTimeToStr(date, DATE_TIME_FORMAT_YYYYMMDDHHMISS); System.out.println("日期转换字符串2:" + dateStr2); // /////////////////////////////////////////////////////字符串转换日期测试 String str = "20120817"; SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_YYYYMMDD); Date strDate = sdf.parse(str); System.out.println("字符串转换日期1:" + strDate); Date strDate2 = strToDateTime(str, DATE_FORMAT_YYYYMMDD); System.out.println("字符串转换日期2:" + strDate2); } }
一定要注意的是,你的字符串必须是一个可以解析的,否则就会出现异常!
不知你注意到没有Date有java.util.Date和java.sql.Date两种,在我们的类中的date全是util这种,下面说一下怎么把java.util.Date类型的Date转换为java.sql.Date类型的!
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());