2.时间处理相关类
-
时间处理的相关类主要在Java.util包中
-
其中Date类为核心 ,Calendar为日期计算首选
-
Date 时间类
-
计算机中的时间是如何计算的?
日历时间:
有些书上又叫系统时间。该值是自1970年1月1日00:00:00以来国际标准时间(U T C)所经过的秒数累计值(早期的手册称U T C为格林尼治标准时间)。在PC/AT微机系统中,支撑该时间的硬件是实时钟RT(Real Time)电路。操作系统在系统初始化的过程中,会从该电路中读取该时间,并保存在内核变量中。 -
我们计算机的时间是从1970年1月1日00:00:00开始到现在的毫秒值。
- 通过毫秒转化为各种不同的时间单位
package com.timezone.demo;
import java.util.Date;
public class Demo1 {
public static void main(String[] args) {
Date date = new Date();
long t = System.currentTimeMillis(); //获取时间毫秒值
System.out.println(t);
System.out.println(date); // 获取完整的系统时间
System.out.println(date.getTime()); //获取时间毫秒值
System.out.println("==================================");
Date date1 = new Date();
System.out.println(date.before(date1)); // 比较是否在某个时间之前
System.out.println(date.after(date1)); // 比较是否在某个时间之前
System.out.println("==================================");
}
}
-
DateFormat 与 SimpleDateFormat类
-
DateFormat是一个时间格式化的抽象类,SimpleDateFormat 是其的一个实现类
-
完成字符串的时间格式之间的转换。
package com.timezone.demo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo2 {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
Date date = new Date();
date.setTime(123465646L);
System.out.println(df.format(date)); // 按照格式将时间对象转化为字符串
df.applyPattern("yyyy-MM-dd hh:mm:ss"); // 重新设置时间格式
System.out.println(df.format(date));
System.out.println("===================================");
// 字符串转化为时间对象
Date date$1 = null;
String dateStr = "2020-07-29 16:36:22";
try {
date$1 = df.parse(dateStr); //注意:字符串的格式一定要跟我们设置的时间格式一致,否则会报解析异常
} catch (ParseException e) {
e.printStackTrace();
} finally {
System.out.println(date$1);
}
}
}
- **Calendar ** 是一个日历相关的抽象类,GregorianCalendar 是其一个实现类(公历)
- 国外的月份没有1~12月的概念,设计时,1月是0,2月是1…12月是11
- 国外的星期日是1,星期一是2…,星期六是7
package com.timezone.demo;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class Demo3 {
public static void main(String[] args) {
GregorianCalendar gregorianCalendar = new GregorianCalendar();
gregorianCalendar.set(2020,6,29,17,01,22); // 设置时间
Date time = gregorianCalendar.getTime();// 获取时间
System.out.println(time);
System.out.println("============================");
gregorianCalendar.setTime(new Date());
Date time$1 = gregorianCalendar.getTime();
System.out.println(time$1);
System.out.println("============================");
gregorianCalendar.add(Calendar.YEAR,30);// 对时间进行计算
System.out.println(gregorianCalendar.getTime());
gregorianCalendar.add(Calendar.YEAR,-50);
System.out.println(gregorianCalendar.getTime());
}
}
- 日期可视化小案例
package com.timezone.demo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Test {
static String dateStr;
static Date date;
public static void main(String[] args) {
SetDate();//用户输入日期
ProcessingDate processingDate = new ProcessingDate().invoke();
int flag = processingDate.getFlag(); // 获取换行标记
int MAX_DATE = processingDate.getMax_date();//获取月份最大日期
int date$ = processingDate.getDate$();// 获取实际日期
PrintDate(flag, MAX_DATE, date$);//打印日历
}
public static void SetDate() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("请输入一个日期(例 2020-07-29)");
Scanner scanner = new Scanner(System.in);
// 捕获字符串
if (scanner.hasNext()) {
dateStr = scanner.next();
} else {
System.out.println("格式错误");
System.exit(0);
}
try {
date = dateFormat.parse(dateStr); // 字符串转化为时间对象
} catch (ParseException e) {
System.out.println("格式错误");
System.exit(0);
}
}
public static void PrintDate(int flag, int MAX_DATE, int date$) {
System.out.println("日\t一\t二\t三\t四\t五\t六"); // 打印表头
for (int i = 0; i < flag; i++) {
// 打印前边空白
System.out.print("\t");
}
for (int i = 1; i <= MAX_DATE; i++) {
// 打印日期
if (i == date$) {
System.out.print(i + "*\t");
} else {
System.out.print(i + "\t");
}
flag++;
if (flag % 7 == 0) {
System.out.println();
}
}
}
private static class ProcessingDate {
private int flag;// 标记处理换行
private int max_date;// 这个月的最大日期
private int date$;//输入的实际日期
public int getFlag() {
return flag;
}
public int getMax_date() {
return max_date;
}
public int getDate$() {
return date$;
}
public ProcessingDate invoke() {
GregorianCalendar gregorianCalendar = new GregorianCalendar(); // 实例公历对象
gregorianCalendar.setTime(date); //设置日历时间
gregorianCalendar.set(Calendar.DATE, 1); // 设置日期为1号
flag = gregorianCalendar.get(Calendar.DAY_OF_WEEK) - 1;
gregorianCalendar.setTime(date); //重置时间
max_date = gregorianCalendar.getActualMaximum(Calendar.DATE);
date$ = gregorianCalendar.get(Calendar.DATE);
return this;
}
}
}