1.Date
/** * java.util.Date * Date的每一个实例用于表示一个确切的时间(精度为毫秒) * 内部维护一个long值,该值表示的自1970年1月1日00:00:00到当前Date表示的时间之间所经过的毫秒。 * Date存在时区等设计缺陷,因此大部分方法都被声明为过时的再以后的开发中不应当再使用。 */ public class DateDemo { public static void main(String[] args) { Date date = new Date(); System.out.println(date); /* * long getTime() * 获取Date内部维护的毫秒值 */ long time = date.getTime(); System.out.println(time); date.setTime(0); System.out.println(date); } }
2.SimpleDateFormat
/** * java.text.SimpleDateFormat * 该类可以将Date与String之间按照指定的格式进行相互转换。 */ public class SimpleDateFormatDemo1 { public static void main(String[] args) { Date now = new Date(); System.out.println(now); /* * 2019-08-21 10:35:22 * yyyy-MM-dd HH:mm:ss */ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E a"); /* * String format(Date date) * 将给定的Date对象按照当前SDF指定的日期格式转换为字符串 */ String line = sdf.format(now); System.out.println(line); } }
/** * 将一个字符串解析为Date对象 */ public class SimpleDateFormatDemo2 { 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); } }
/** * 程序启动后,要求用户输入自己的生日,格式为:yyyy-MM-dd * 然后经过程序计算,输出到今天为止一共活了多少 * 天。然后再输出其出生10000天的纪念日是哪天,输出的格式同上。 */ public class Test { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); System.out.println("请输入您的生日:"); String birthStr = scanner.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+"天,请继续保持!"); time = birth.getTime()+1000*60*60*24*10000L; Date date = new Date(time); String line = sdf.format(date); System.out.println("您出生10000天的纪念日为:"+ line); } }
3.Calendar
/** * java.util.Calendar 日历类 * Calendar是一个抽象类,规定了日历类操作时间的一系列方法。 * 可以使用其提供的静态方法:getInstance来获取一个当前系统所在地区适用的实现类,大部分地区获取回来 * 的是GregorianCalendar,即:阳历实现类 */ public class CalendarDemo1 { 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); } }
/** * int get(int field) * 获取当前Calendar表示的日期中指定时间分量所对应的值。 * 不同的时间分量用不同的整数表示,无需记忆,Calendar提供了大量的常量与之对应 */ public class CalendarDemo2 { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); /* * 月需要注意从0开始,即:0表示1月,1表示2月... */ int month = calendar.get(Calendar.MONTH)+1; /* * 和"天"相关的时间分量有: * DAY_OF_MONTH:月中的天 * DAY_OF_WEEK:周中的天 * DAY_OF_YEAR:年中的天 * DATE:月中的天,与DAY_OF_MONTH一致 */ int day = calendar.get(Calendar.DATE); System.out.println(year+"-"+month+"-"+day); int h = calendar.get(Calendar.HOUR_OF_DAY); int m = calendar.get(Calendar.MINUTE); int s = calendar.get(Calendar.SECOND); System.out.println(h+":"+m+":"+s); int days = calendar.get(Calendar.DAY_OF_YEAR); System.out.println("今天是今年的第"+days+"天"); /* * 按照美国的习惯,一周的第一天是周日 */ days = calendar.get(Calendar.DAY_OF_WEEK)-1; String[] data = {"日","一","二","三","四","五","六"}; System.out.println("今天是周"+data[days]); //获取指定时间分量所允许的最大值 int d = calendar.getActualMaximum(Calendar.DAY_OF_YEAR); System.out.println("今年共"+d+"天"); } }
/** * void set(int field,int value) * 调整当前Calendar指定时间分量为给定的值 */ public class CalendarDemo3 { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); System.out.println(calendar.getTime()); //2008-08-08 20:08:08 //调整年为2008 calendar.set(Calendar.YEAR,2008); //调整为8月 calendar.set(Calendar.MONTH, Calendar.AUGUST); //调整为8号 calendar.set(Calendar.DATE, 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.DAY_OF_WEEK, Calendar.WEDNESDAY); System.out.println(calendar.getTime()); } }
/** * void add(int field,int amount) * 对指定的时间分量加上给定的值,若给定的值为负数则是减去。 */ public class CalendarDemo4 { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); System.out.println(calendar.getTime()); /* * 查看3年2个月零25天以后那周的周三是哪天? */ //加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,4); System.out.println(calendar.getTime()); } }
/** * 计算商品促销日期 * 程序启动后,要求用户输入商品生产日期:yyyy-MM-dd * 再输入商品的保质期天数,为一个整数。 * 然后经过程序计算,输出该商品促销日期,格式同上。 * 规则: * 商品过期日前两周的周三为促销日期。 */ public class Test2 { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); System.out.println("请输入生产日期:"); String str = scanner.nextLine(); System.out.println("请输入保质期的天数:"); int days = Integer.parseInt(scanner.nextLine()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(str); //使Calendar表示生产日期 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); //计算过期日 calendar.add(Calendar.DAY_OF_YEAR, days); //调整为前两周的周三 calendar.add(Calendar.DAY_OF_YEAR, -14); calendar.set(Calendar.DAY_OF_WEEK, 4); date = calendar.getTime(); str = sdf.format(date); System.out.println("促销日期为:"+str); } }