一.Date类的操作getTime(),setTime()——返回long类型
该值表示自1970年1月1日 00:00:00
到当前Date实例所表示的时间之间所经过的毫秒值。
1.DateDemo
package day14;
import java.util.Date;
/**
* java.util.Date
* Date的每一个实例用于表示一个确切的时间点。
* 内部维护一个long值,该值表示自1970年1月1日 00:00:00
* 到当前Date实例所表示的时间之间所经过的毫秒值。
* 由于Date存在时区与千年虫问题,所以在JDK1.1版本起,
* 大部分方法都被声明为过时的。
* 为此,现在使用Date仅用来表示一个时间,并不对它做其他
* 操作。
* @author soft01
*
*/
public class DateDemo {
public static void main(String[] args) {
//默认创建出来即表示当前系统时间
Date now = new Date();
System.out.println(now);
long time = now.getTime();
System.out.println(time);
//加一天的时间
time += 1000*60*60*24;
now.setTime(time);
System.out.println(now);
/* 程序输出结果如下:
Thu Oct 26 14:17:42 CST 2017
1508998662155
Fri Oct 27 14:17:42 CST 2017*/
}
}
二.SimpleDateFormat类的操作:
format(now)——将Date类型的对象转换为不同格式的日期(字符串类型)
parse(str)——将字符串类型的变量转换为Date类型的对象
1.日期格式转换
package day14;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* java.text.SimpleDateFormat
* 该类可以将Date与String之间按照一个指定的
* 日期格式进行互相转换。
* @author soft01
*
*/
public class SimpleDateFormat_format {
public static void main(String[] args) {
Date now = new Date();
System.out.println(now);
/*
* 2017-10-26 10:25:55
* yyyy-MM-dd HH:mm;ss
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/*
* String format(Date date)
* 将给定的Date表示的时间按照当前SDF
* 指定的日期格式转换为字符串并返回。
*/
String str = sdf.format(now);
System.out.println(str);
/*程序结果如下:
Thu Oct 26 14:49:34 CST 2017
2017-10-26 14:49:34*/
}
}
2.解析日期格式字符串
package day14;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 将字符串按照指定的日期格式解析为Date
* @author soft01
*
*/
public class SimpleDateFormat_parse {
public static void main(String[] args) throws ParseException {
String str = "2008-08-08 20:08:08";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
System.out.println(date);
/*程序结果如下:
Fri Aug 08 20:08:08 CST 2008*/
}
}
3.练习:输入日期到今天的天数,输入到多少天是什么时候
package day14;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* 程序启动后,要求用户输入自己的生日,
* 格式如:1992-08-02
* 然后经过计算,显示该用户到今天为止是多少天。
* @author soft01
*
*/
public class Test {
public static void main(String[] args) throws ParseException {
System.out.println("请输入您的生日:格式如:1994-05-25");
Scanner scan = new Scanner(System.in);
String birthStr = scan.nextLine();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date birth = sdf.parse(birthStr);
Date now = new Date();
long time = now.getTime() - birth.getTime();
time = time / 1000 / 60 / 60 / 24;
System.out.println("你出生到现在已有" + time + "天!");
int future = scan.nextInt();
birth.setTime(birth.getTime() + future * 1000l * 60 * 60 * 24);
String str = sdf.format(birth);
System.out.println("您出生future天的纪念日为:" + str);
scan.close();
/*结果如下:
请输入您的生日:格式如:1994-05-25
1994-05-25
你出生到现在已有8555天!
10000
您出生future天的纪念日为:2021-10-10*/
}
}
4.练习:实现一个电子表功能
package day14;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 实现一个电子表功能
* 每秒钟在控制台输出当前系统时间。
* 格式如:11:47:55
* @author soft01
*
*/
public class Test2 {
public static void main(String[] args) throws InterruptedException {
while(true) {
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(now);
String time = str.substring(10);
System.out.println(time);
Thread.sleep(1000);
}
}
}
三.Calendar类的操作:getInstance(),getTime(),setTime()——返回Date类型
获取日相关的常量(int field):月中的天:DATE DAY_OF_MONTH
周中的天:DAY_OF_WEEK 年中的天:DAY_OF_YEAR
get(field)——现在的年月天 getActualMaximum(field)——现在年月天数最大值
set(field,value)——设置年月天时分秒为value值
add(field,amount)——将现在年月日加上amount个年月日
1.创建Calendar实例对象(getInstance()),getTime()和setTime()方法的用法
package day14;
import java.util.Calendar;
import java.util.Date;
/**
* java.util.Calendar
* 日历类,用于操作时间的类。
*
* 常用实现类:GregorianCalendar,即所谓的“阳历”
*
* Calendar提供了一个静态方法:getInstance,通过
* 这个方法可以获取一个当前系统所在地区适用的实现类
* 通常返回的都是阳历历法。
* @author soft01
*
*/
public class Calendar_getInstance {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
/*
* Calendar提供了方法:
* Date getTime()
* 该方法可以获取当前Calendar所表示的
* 时间,并以一个Date形式返回。
*/
Date date = calendar.getTime();
System.out.println(date);
/*
* void setTime(Date date)
* 设置当前Calendar表示给定的Date对象
* 所表示的时间。
*/
calendar.setTime(date);
/*结果如下:
java.util.GregorianCalendar[......]
Thu Oct 26 14:47:41 CST 2017*/
}
}
2.Calendar类中get(field)和getActualMaximum(field)方法的用法
package day14;
import java.util.Calendar;
/**
* Calendar提供了一个方法:
* int get(int field)
* 该方法的作用是获取当前Calendar所表示的时间中
* 给定时间分量所对应的值。
*
* 参数是一个int值,不同的值表示不同的时间分量
* Calendar提供了大量的常量,来表示不同的时间时间分量
* @author soft01
*
*/
public class Calendar_get {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
//获取年
int year = calendar.get(Calendar.YEAR);
System.out.println(year);
//获取月 注意:月从零开始
int month = calendar.get(Calendar.MONTH)+1;
System.out.println(month);
/*
* 获取日
* 相关的常量:
* DATE 月中的天
* DAY_OF_MONTH 月中的天
* DAY_OF_WEEK 周中的天
* DAY_OF_YEAR 年中的天
*/
int day = calendar.get(Calendar.DATE);
System.out.println(day);
int doy = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println(doy);
int dow = calendar.get(Calendar.DAY_OF_WEEK)-1;
String[] data = {"日","一","二","三","四","五","六"};
System.out.println("今天是星期"+data[dow]);
/*
* int getActualMaximum(int field)
* 获取给定时间分量所允许的最大值,参考
* 时间为当前Calendar表示的时间
*
* 看看今年共多少天?
*/
int days = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println(year+"年共"+days+"天");
days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(month+"月共"+days+"天");
/*程序结果如下:
2017
10
26
299
今天是星期四
2017年共365天
10月共31天*/
}
}
3.Calendar类中set(field,value)方法的用法
package day14;
import java.util.Calendar;
/**
* void set(int field,int value)
* 设置当前Calendar表示的时间中指定时间分量
* 为给定的值。
* @author soft01
*
*/
public class Calendar_set {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
//设置年
calendar.set(Calendar.YEAR, 2008);
System.out.println(calendar.getTime());
//设置月
calendar.set(Calendar.MONTH, Calendar.AUGUST);
System.out.println(calendar.getTime());
//设置天
calendar.set(Calendar.DAY_OF_MONTH, 8);
calendar.set(Calendar.HOUR_OF_DAY, 20);
calendar.set(Calendar.MINUTE, 8);
calendar.set(Calendar.SECOND,8);
System.out.println(calendar.getTime());
/*
* 设置自己出生的那天
* 查看那天是星期几,以及那天是那一年的第几天?
*/
calendar.set(Calendar.YEAR, 1994);
calendar.set(Calendar.MONTH, Calendar.JULY);
calendar.set(Calendar.DAY_OF_MONTH, 3);
System.out.println(calendar.getTime());
int dow = calendar.get(Calendar.DAY_OF_WEEK)-1;
String[] data = {"日","一","二","三","四","五","六"};
System.out.println("那天是星期"+data[dow]);
int doy = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println("那天是那一年的第"+doy+"天");
/*程序运行结果如下:
Thu Oct 26 15:59:42 CST 2017
Sun Oct 26 15:59:42 CST 2008
Tue Aug 26 15:59:42 CST 2008
Fri Aug 08 20:08:08 CST 2008
Sun Jul 03 20:08:08 CST 1994
那天是星期日
那天是那一年的第184天*/
}
}
4.Calendar类中add(field,amount)方法的用法
package day14;
import java.util.Calendar;
/**
* void add(int field,int amount)
* 使当前Calendar表示的时间中指定时间
* 分量的值加上给定的值。若amount是个负数,
* 则是减去。
* @author soft01
*
*/
public class Calendar_add {
public static void main(String[] args) {
/*
* 查看3年后2个月零25天以后所在周的周五的前8天是哪天
*/
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
//加3年
calendar.add(Calendar.YEAR, 3);
System.out.println(calendar.getTime());
//加2个月
calendar.add(Calendar.MONTH, 2);
System.out.println(calendar.getTime());
//加25天
calendar.add(Calendar.DAY_OF_YEAR, 25);
System.out.println(calendar.getTime());
calendar.set(Calendar.DAY_OF_WEEK, 6);
calendar.add(Calendar.DAY_OF_YEAR, -8);
System.out.println(calendar.getTime());
/*程序结果如下:
Thu Oct 26 17:06:08 CST 2017
Mon Oct 26 17:06:08 CST 2020
Sat Dec 26 17:06:08 CST 2020
Wed Jan 20 17:06:08 CST 2021
Thu Jan 14 17:06:08 CST 2021*/
}
}
5.练习:求促销日期
package day14;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
* 计算促销日期
* 促销日期为商品过期日前两周的周三
*
* 程序启动后,要求用户输入一个商品的生产日期,
* 以及保质期的天数。
* 然后经过处理后输出该商品的促销日期
*
* 日期格式:yyyy-MM-dd
* @author soft01
*
*/
public class Test3 {
public static void main(String[] args) throws ParseException {
Scanner scan = new Scanner(System.in);
System.out.println("请输入商品的生产日期:(如:2017-11-01)");
String birthStr = scan.nextLine();
System.out.println("请输入保质期的天数:");
int day = scan.nextInt();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date birth = sdf.parse(birthStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(birth);
calendar.add(Calendar.DAY_OF_YEAR, day);
System.out.println(calendar.getTime());
calendar.set(Calendar.DAY_OF_WEEK, 4);
calendar.add(Calendar.DAY_OF_YEAR, -14);
System.out.println(calendar.getTime());
/*结果如下:
请输入商品的生产日期:(如:2017-11-01)
2017-11-01
请输入保质期的天数:
60
Sun Dec 31 00:00:00 CST 2017
Wed Dec 20 00:00:00 CST 2017*/
}
}