java日期转换的工具(封装好的工具类)、计算商品还有多少天会过保质期

一、 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 + "天过期");
		}
	}
	
}

测试结果如下所示:
java日期转换的工具(封装好的工具类)、计算商品还有多少天会过保质期_第1张图片
java日期转换的工具(封装好的工具类)、计算商品还有多少天会过保质期_第2张图片

你可能感兴趣的:(java,面向对象,日期转换,工具类)