一、 java日期转换的工具(封装好的工具类)
代码如下:
DateUtil .java
package com.chapter1.homework;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
//注意导入包的时候有,java.util.包 和java.sql.包 这里是导java.util包,后续把数据库日期转为java日期,或者java日期转为数据库日期才需要导java.sql包
import java.util.Date;
import oracle.sql.DATE;
/**
* 日期与字符串转换工具
* Date---->String
* String--->Date
*
* Calendar---->Date
* Date--->Calendar
*
* Calendar-->Date-->String
* String-->Date-->Calendar
*
* util.Date--->sql.Date
* sql.Date-->util.Date
*/
public class DateUtil {
//创建私有的:其他类就不能修改; static :静态的就是可以共享使用;定义一个日期格式"yyyy-MM-dd HH:mm:ss"可以是任意一种日期格式
//private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
/**
* Date 日期-->String 字符串
* @param(参数) date 传入日期类型
* @return 返回字符串类型
*/
//访问类型为public 就可以大家都能使用,static :静态方法可以直接通过 ( 类名.方法名) 访问,有利于快捷访问
public static String dateToString(Date date)
{
if(date == null)
{
return null;
}
return sdf.format(date);
}
/**
* Calendar 日历--->String 字符串
* @param Calendar 传入日历类型
* @return 返回字符串类型
*/
public static String calendarToString(Calendar calendar)
{
if(calendar == null)
{
return null;
}
return sdf.format(calendar.getTime());
}
/**
* String 字符串-->Date日期
* @param string 传入字符串类型
* @return 返回日期了类型
*/
public static Date StringToDate(String string)
{
try{
return sdf.parse(string);
}
catch(ParseException e)
{
e.printStackTrace();
}
return null;
}
/**
* String 字符串-->Calendar 日历
* @param String 传入字符串类型
* @return 返回日历类型
*/
public static Calendar StringToCalendar(String string)
{
try{
//Calendar不能创建对象,但它的子类可以,所以这里是获取Calendar的实例
Calendar calendar = Calendar.getInstance();
//把字符转为日期类型,再calendar把日期类型 设置为指定日期
calendar.setTime(sdf.parse(string)); //calendar的可以设置指定日期
return calendar;
}
catch(ParseException e)
{
e.printStackTrace();
}
return null;
}
/**
* Date 日期---->Calendar 日历
* @param date 传入Date 类型日期
* @return 返回Calendar 类型日历
*/
public static Calendar dateToCalendar(Date date)
{
if(date ==null)
{
return null;
}
Calendar calendar = Calendar.getInstance();
//将传入的Date日期赋值给当前calendar
calendar.setTime(date);
return calendar;
}
/**
* Calendar 日历---->Date 日期
* @param calendar 传入Calendar类型日历
* @return 返回Date类型日期
*
*/
public static Date calendarToDate(Calendar calendar)
{
if(calendar ==null)
{
return null;
}
return calendar.getTime();
}
/**
* Java.util.Date(父类) java 日期 ------>java.sql.Date(子类) 数据库日期
* long utilMillionSeconds = date.getTime(); //util.Date--->毫秒值: date.getTime()获取毫秒值
*
* java.sql.Date sqlDate = new java.sql.Date(utilMillionSeconds);//sql.Date(毫秒值)---->java.sql.Date 年月日
* java.sql.Time time = new java.sql.Time(utilMillionSeconds);//sql.Date(毫秒值)----->java.sql.Time 时分秒
* java.sql.TimeStamp = new java.sql.TimeStamp(utilMillonSeconds);//sql.Date(毫秒值)---->java.sql.TimeStamp 年月日 时分秒
*
* @param date java日期
* @return date sql数据库日期
*/
public static Date utilDateToSqlDate(java.util.Date utilDate)
{
if(utilDate ==null)
{
return null;
}
//util.date转换为毫秒 值 date.getTime()
long utilMillionSeconds = utilDate.getTime(); //util.Date -->毫秒值
//通过构造函数把util.date的毫秒值转换为sql.date毫秒值
java.sql.Date sqlDate = new java.sql.Date(utilMillionSeconds); //sql.Date(毫秒值)--->java.sql.Date 年月日格式
return sqlDate;
//java.sql.Time time = new java.sql.Time(utilMillionSeconds); //sql.Date(毫秒值)--->java.sql.Time 时分秒格式
// return time;
//java.sql.TimeStamp timestamp = new java.sql.TimeStamp(utilMillionSeconds); //sql.Date(毫秒值)---->java.sql.Timestamp 年月日 时分秒
//return timestamp;
}
/**
* sql.Date (子类) 数据库日期 ------->util.Date(父类) java 日期 :上溯造型-->子类向上自动转转换为父类类型,所以此处不需要特殊处理
*
* java.sql.Date 年月日
* java.sql.Time 时分秒
* java.sql.Timestamp 年月日 时分秒
*
*/
//java.sql.Date 年月日格式
public static Date sqlDateToUtilDate(java.sql.Date sqlDate)
{
if(sqlDate == null)
{
return null;
}
//java.sql.Date 年月日格式
return sqlDate;
}
//java.sql.Time 时分秒格式
public static Date sqlDateToUtilDate(java.sql.Time sqlDate)
{
if(sqlDate == null)
{
return null;
}
//java.sql.Time 时分秒格式
return sqlDate;
}
//java.sql.Timestamp 年月日 时分秒格式
public static Date sqlDateToUtilDate(java.sql.Timestamp sqlDate)
{
if(sqlDate == null)
{
return null;
}
//java.sql.Time 年月日 时分秒格式
return sqlDate;
}
}
二、引用上面的工具类例子:
(1)输入日期格式字符串作为商品的生产日期,输入保质期(天);计算截止到今天,该商品还有多少天会过保质期。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Date {
public static void main(String[] args) {
//控制台输入字符串转为日期格式
Scanner scanner = new Scanner(System.in);
System.out.println("请您输入生产日期:"+"(yyyy-MM-dd)");
String productionDate = scanner.nextLine();
//调用DateUtill类中封装好的方法中字符串--->日期方法
Date productionDate1 =DateUtil.StringToDate(productionDate);
//输入保质期(天)
System.out.println("请您输入保质日期(天):");
int guaranteeDate = scanner.nextInt();
//将输入日期增加保质期天数
Calendar calendar = Calendar.getInstance();
//将传入的Date日期赋值给当前calendar,将calendar指定为用户输入的日期,没有返回返回值的所以不用赋值给其他,用getTime获取
calendar.setTime(productionDate1);
//用户输入的日期再加用户输入的保质期就是有效保质期,没有返回返回值的所以不用赋值给其他,用getTime获取
calendar.add(Calendar.DAY_OF_MONTH,guaranteeDate);
//获取最最终保质期截止日期
Date lastVailDate = calendar.getTime();
//System.out.println(lastVailDate);
//取得当前系统日期
Date currentDate = new Date();
//比较两个日期
//getTime() 获取指定时间的毫秒值,
long currentMillisecond = currentDate.getTime();
long lastVailDateMillisecond=lastVailDate.getTime();
long millisecondApart= lastVailDateMillisecond-currentMillisecond;
//System.out.println(millisecondApart);
//比较两个日期,如果过期输出“该商品已经过期”,如果没有过期,输出天数
if(millisecondApart <0)
{
System.out.println("该商品已经过期");
}
else
{
//把当前日期转化为字符串格式输出到控制台
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String now =sdf.format(currentDate);
System.out.println("今天日期为:" + now);
//如果没有过期,输出天数
int x = (int) (millisecondApart / (1000 * 60 * 60 * 24));
System.out.println("还有" + x + "天过期");
}
}
}
测试结果如下所示: