日期格式化
在 Java 中获取当前时间,可以使用 java.util.Date 类和 java.util.Calendar 类完成。其中,Date 类主要封装了系统的日期和时间的信息,Calendar 类则会根据系统的日历来解释 Date 对象。
一、Date类
1、无参构造方法
Date 类的无参构造函数所创建的对象可以获取本机当前时间,例如:
Date date = new Date;//Date类在java.util包中
System.out.println(date);//输出当前时间
Sat Oct 16 18:43:54 CST 2021
Date 对象表示时间的默认顺序为:星期、月、日、小时、分、秒、年。
有参构造方法
计算机系统自身时间是1970年1月1日0时,也就是格林威治时间,可以根据这个时间使用 Date 有参的构造方法创建 Date 对象。例如:
Date date1 = new Date(1000);
Date date2 = new Date(-1000);
Thu Jan 01 08:00:01 CST 1970
Thu Jan 01 07:59:59 CST 1970
上述两行代码中,参数正数表示公元后的时间,参数负数表示公元前的时间。参数1000表示1000毫秒即1秒,北京时间与格林威治时间差8个小时。
Date 类有如下两个构造方法。
- Date(): 使用该构造方法创建的对象可以获取本地的当前时间。
- Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。
方法 | 描述 |
---|---|
boolean after(Date when) | 判断此日期是否在指定日期之后 |
boolean before(Date when) | 判断此日期是否在指定日期之前 |
int compareTo(Date anotherDate) | 比较两个日期的顺序 |
boolean equals(Object obj) | 比较两个日期的相等性 |
long getTime() | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来,此 Date 对象表示的毫秒数 |
String toString() | 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
public class Date_test {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);//输出时间
System.out.println(date.toString());//转换成String的形式,并输出
System.out.println(date.getTime());//获得毫秒数。
}
}
import java.util.Date;
public class Date_test {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
System.out.println(date.toString());
System.out.println(date.getTime());
System.out.println(new Date(121, 9, 12).before(new Date (121, 9, 18)));//after同理
System.out.println(date.getYear());//返回当前年份-1900年的整数型
System.out.println(date.getMonth());//表示月份。返回的值介于0和11之间,0代表1月。
System.out.println(date.getDate());//表示月份中的某一天。返回的值介于1和31之间
System.out.println(date.getDay());//表示的星期几。返回值(0 =周日,1 =周一,2 =周二,3 =周三,4 =周四,5 =周五,6 =周六)
System.out.println(date.getHours());//返回此日期对象表示的小时。
System.out.println(date.getMinutes());//表示分钟数,以本地时区解释。
System.out.println(date.getSeconds());//表示秒数。返回值介于0和61之间。值60和61只能出现在那些考虑闰秒的Java虚拟机上。
}
}
日期比较
Java使用以下三种方法来比较两个日期:
- 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
- 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
- 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
格式化时间
在使用日期和时间时,经常需要对它进行处理,以满足一定的格式需求。
Date date = new Date();
String Str_name = String.format("%t'转义字符'" , date)
1、常用日期和时间的格式化
格式化日期和时间的转义字符定义了各种各种格式化日期和时间字符串的方式,其中最常用的日期和时间如下图:
【使用 printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。】
转 换 符 | 说 明 | 示 例 |
---|---|---|
c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | "年-月-日"格式 | 2007-10-27 |
D | "月/日/年"格式 | 10/27/07 |
r | "HH:MM:SS PM"格式(12时制) | 02:25:51 下午 |
T | "HH:MM:SS"格式(24时制) | 14:28:16 |
R | "HH:MM"格式(24时制) | 14:28 |
//格式化时间以 %t 开头
import java.util.Date;
public class Date_test {
public static void main(String[] args) {
Date today = new Date();
String a = String.format("%tF",today);//"年-月-日"格式
System.out.println(a);//2021-10-17
String b = String.format("%tD",today);//"月/日/年"格式
System.out.println(b);//10/17/21
String c = String.format("%tr",today);//"HH:MM:SS PM"格式(12时制)
System.out.println(c);//10:50:43 上午
String d = String.format("%tT",today);//"HH:MM:SS"格式(24时制)
System.out.println(d);//10:50:43
String e = String.format("%tR",today);//"HH:MM"格式(24时制)
System.out.println(e);//10:50
String f = String.format("%tc",today);//
System.out.println(f);//星期日 十月 17 10:53:25 CST 2021
}
}
2021-10-17
10/17/21
10:53:25 上午
10:53:25
10:53
星期日 十月 17 10:53:25 CST 2021
2、对日期的格式化
定义日期格式的转换符可以使日期通过指定的转换符生成新字符串。
转换符 | 格式说明 | 示例 |
---|---|---|
b或h | 获取月份的简称 | 中:一月 英:Jan |
B | 获取月份的全称 | 中:一月 英:January |
a | 获取星期的简称 | 中:星期一 英:Sat |
A | 获取星期的全称 | 中:星期一 英:Saturday |
y | 获取年(不足4位前面补0) | 2008 |
Y | 获取年后两位(不足2位前面补0) | 08 |
C | 获取年前两位(不足2位前面补0) | 20 |
m | 获取月(不足来位前面补0) | 01 |
d | 获取日(不足2位前面补0) | 06 |
e | 获取日(不足2位前面补0) | 06 |
j | 获取是一年的第多少天 | 006 |
import java.util.Date;
public class Date_test {
public static void main(String[] args) {
Date today = new Date();
String a = String.format("%tA",today);
String b = String.format("%ta",today);
String c = String.format("%tB",today);
String d = String.format("%tb",today);
String e = String.format("%tY",today);
String f = String.format("%ty",today);
String g = String.format("%tC",today);
String h = String.format("%tm",today);
String i = String.format("%td",today);
String j = String.format("%te",today);
String k = String.format("%tj",today);
System.out.println(a+" | "+b);
System.out.println(c+" | "+d);
System.out.println(e+" | "+f+" | "+g);
System.out.println(h+" | "+i);
System.out.println(j);
System.out.println(k);
}
}
星期日 | 星期日
十月 | 十月
2021 | 21 | 20
10 | 17
17
290
3、对时间的格式化
和日期格式化转换符相比,时间格式的转换符要更多更精确。它可以将时间格式化分成时、分、秒,甚至是毫秒。
转换符 | 格式说明 | 示例 |
---|---|---|
H | 获取24小时制的小时(不足2位前面补0) | 15 |
k | 获取24小时制的小时(不足2位前面不用补0) | 15 |
I(大写i) | 获取12小时制的小时(不足2位前面补0) | 03 |
l(小写L) | 获取12小时制的小时(不足2位前面不用补0) | 3 |
M | 获取分钟(不足2位前面补0) | 09 |
S | 获取秒(不足2位前面补0) | 07 |
L | 获取3位的毫秒(不足3位前面补0) | 026 |
N | 获取9位的毫秒(不足9位前面补0) | 005620000 |
p | 显示上下午标记 | 中:下午 英pm |
import java.util.Date;
public class Date_test {
public static void main(String[] args) {
Date today = new Date();
String a = String.format("%tH",today);
String b = String.format("%tk",today);
String c = String.format("%tI",today);
String d = String.format("%tl",today);
String e = String.format("%tM",today);
String f = String.format("%tS",today);
String g = String.format("%tL",today);
String h = String.format("%tN",today);
String i = String.format("%tp",today);
System.out.println(a+" | "+b);
System.out.println(c+" | "+d);
System.out.println(e+" | "+f);
System.out.println(g+" | "+h);
System.out.println(i);
}
}
12 | 12
12 | 12
00 | 31
496 | 4960m00000
下午
二、Calender类
Date类和Calendar类都是关于日期的类,都在java.util包中,使用时需要import。
Calendar提供了获取或设置各种日历字段的方法。是抽象的,无法实例化
构造方法:protected Calendar :由于修饰词是 protected ,无法直接创建对象。
方法名 | 说明 |
---|---|
static Calendar getInstance() | 使用默认时区和区域获取日历。 |
void set(int year , int month , int date , int hourofday , int second) | 设置日历的年月日时分。 |
int get(int field) | 返回给日历字段的值。如年、月、日等 |
void setTime(Date date) | 用给定的Date设置日历的时间。Date-Calendar |
Date getTime() | 返回一个Date表示此日历的时间。Calendar-Date |
void add(int field , int amount) | 按照日历的规则,给指定的字段添加或减少时间 |
long getTimeMillies() | 毫秒为单位返回该日历的时间。 |
import javafx.scene.SceneAntialiasing;
import java.util.Calendar;
public class Date_test {
public static void main(String[] args) {
//1、创建对象
//因为Calender没有办法实例化,只能通过getInstence来调用。
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime().toLocaleString());//2021-10-17 13:15:54
System.out.println(calendar.getTime().toString());//Sun Oct 17 13:16:22 CST 2021
System.out.println(calendar.getTimeInMillis());//1634447831929:1970年到现在的毫秒值
//2、获取时间信息:
//获取年:
int year = calendar.get(Calendar.YEAR);//写1或写YEAR是一样的效果
//获取月
int month = calendar.get(Calendar.MONTH);
//获取日:
int day = calendar.get(Calendar.DATE);//DATE和DATE_OF_MONTH是一样的。
//小时
int hour = calendar.get(Calendar.HOUR);//HOUR是12小时的 Hour_OF_DAY是24小时的
//分钟:
int minute = calendar.get(Calendar.MINUTE);
//秒
int second = calendar.get(Calendar.SECOND);
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒");//2021年9月17日1时28分51秒
//3、修改时间
//set方法修改时间
Calendar calendar2 = Calendar.getInstance();
calendar2.set(Calendar.DAY_OF_MONTH,5);
System.out.println(calendar2.getTime().toLocaleString());
//add方法修改时间
calendar2.add(Calendar.HOUR,1);//amount为正数增加,为负数减少。
System.out.println(calendar2.getTime().toLocaleString());
//4、补充方法
int max=calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
int min=calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
System.out.println(max);//31/30
System.out.println(min);//1
}
}
2021-10-17 13:55:56
Sun Oct 17 13:55:56 CST 2021
1634450156405
2021年10月17日1时55分56秒
2021-10-5 13:55:56
31
1