Date
java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。
第一个构造函数使用当前日期和时间来初始化对象。
// 使用该构造函数创建对象,获取到当前的时间
Date date = new Date();
//输出为:Thu Jul 12 16:32:16 CST 2018
第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数.
//使用该构造函数创建对象,获取到从1970-1-1起加上你输入的毫秒数,然后转成Date型
Date date = new Date(12);
System.out.println(date);
//输出为:Thu Jan 01 08:00:00 CST 1970
当我们创建Date对象之后,可以设置自1970-1-1 00:00:00 GMT以后time毫秒数设置时间和日期
//用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
void setTime(long time)
使用
date.setTime(50);
System.out.println(date);
//输出为:Thu Jan 01 08:00:00 CST 1970
而long getTime()
返回的是自 1970 年 1 月 1 日 00:00:00 GMT 以来, Date 对象表示的毫秒数。
Date date = new Date();
System.out.println(date.getTime());
//输出为:1531386321754
Date类的使用方法
序号 | 方法和描述 |
---|---|
1 | boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
2 | boolean before(Date date) 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
3 | Object clone( ) 返回此对象的副本。 |
4 | int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
5 | int compareTo(Object obj) 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。 |
6 | boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
7 | long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
8 | int hashCode( ) 返回此对象的哈希码值。 |
9 | void setTime(long time) 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 |
10 | String toString( ) 转换Date对象为String表示形式,并返回该字符串。 |
获取当前日期时间
Java中获取当前日期和时间很简单,使用Date对象的 toString()方法来打印当前日期和时间,如下所示:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
String strDate, strTime = "";
Date date = new Date();
System.out.println("今天的日期是:" +date);
long time = date.getTime();
System.out.println("自1970年1月1日起以毫秒为单位的时间(GMT):" + time);
strDate = date.toString();
//提取 GMT 时间
strTime = strDate.substring(11,(strDate.length()-4));
//按小时,分钟和秒提取时间
strTime = "时间:" + strTime.substring(0,8);
System.out.println(strTime);
}
}
以上实例编译运行结果如下:
今天的日期是:Thu Jun 28 16:37:47 CST 2018
自1970年1月1日起以毫秒为单位的时间(GMT):1530175067129
时间:16:37:47
日期比较
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类实现了这个接口。
SimpleDateFormat
使用SimpleDateFormat格式化日期
SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat允许你选择任何用户自定义日期时间格式来运行。例如:
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
以上实例编译运行结果如下:
Current Date: 星期四 2018.06.28 at 09:53:48 下午 CST
简单的DateFormat格式化编码
时间模式字符串用来指定时间格式. 在此模式中,所有的ASCII字母被保留为模式字母,定义如下:
字母 | 描述 | 表示 | 示例 |
---|---|---|---|
G | 纪元标记 | Test | AD |
y | 四位年份 | Year | 2001 |
M | 月份 | Month | July or 07 |
d | 一个月的日期 | Number | 10 |
h | A.M./P.M. (1~12)格式小时 | Number | 12 |
H | 一天中的小时 (0~23) | Number | 22 |
m | 分钟数 | Number | 30 |
s | 秒数 | Number | 55 |
S | 毫妙数 | Number | 234 |
E | 星期几 | Test | Tuesday |
D | 一年中的日子 | Number | 360 |
F | 一个月中第几周的周几 | Number | 2 (second Wed. in July) |
w | 一年中第几周 | Number | 40 |
W | 一个月中第几周 | Number | 1 |
a | A.M./P.M. 标记 | Test | PM |
k | 一天中的小时(1~24) | Number | 24 |
K | A.M./P.M. (0~11)格式小时 | Number | 10 |
z | 时区 | General time zone | Eastern Standard Time |
Z | 时区 | RFC 822 time zone | -0800 |
' | 文字定界符 | Delimiter | |
" | 单引号 | ` |
使用printf格式化日期
printf方法可以很轻松地格式化时间和日期。使用两个字母格式,它以t开头并且以下面表格中的一个字母结尾。例如:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
//初始化 Date 对象
Date date = new Date();
// 使用 toString()显示日期和时间
String str = String.format("Current Date/Time : %tc", date);
System.out.printf(str);
}
}
以上实例编译运行结果如下:
Current Date/Time : 星期四 六月 28 22:07:35 CST 2018
如果你需要重复提供日期,那么利用这种方式来格式化它的每一部分就有点复杂了.因此,可以利用一个格式化字符串指出要被个刷的参数的索引.
索引必须紧跟在%后面,而且必须以$结束.例如:
import java.util.Date;
public class TestDemo {
public static void main(String args[]) {
//初始化 Date 对象
Date date = new Date();
// 使用 toString()显示日期和时间
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
以上实例编译运行结果如下:
Due date: 六月 28, 2018
或者,你可以使用<标志.它表明先前被格式化的参数要被再次使用.例如:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
//初始化 Date 对象
Date date = new Date();
// 使用 toString()显示日期和时间
System.out.printf("%s %tB %
以上实例编译运行结果如下:
Due date: 六月 28, 2018
Calendar类
java.util.Calendar类是一个抽象类,在某一特定的瞬间或日历上,提供年、月、日、小时之间的转换方法。
public abstract class Calendar extends Objectimplements Serializable, Cloneable, Comparable
该类被abstract所修饰,说明不能通过new的方式来获得实例,对此,Calendar提供了一个类方法getInstance,以获得此类型的一个通用的对象,getInstance方法返回一个Calendar对象(该对象为Calendar的子类对象),其日历字段已由当前日期和时间初始化:
Calendar calendar = Calendar.getInstance();
//获取当前时间
System.out.println(calendar.getTime());
//获取当前毫秒数
System.out.println(calendar.getTimeInMillis());
为了更加便捷的堆日期进行操作,Calendar类对YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970年1月1日的00:00:00.000,格里高利历)的偏移量。
下面是Calendar常用的方法
Calendar calendar = Calendar.getInstance();
//获取年
int year = calendar.get(Calendar.YEAR);
//获取月,这里需要月份的范围是0~11,因此获取月份的时候需要+1才是当前月份值
int month = calendar.get(Calendar.MONTH) + 1;
//获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
//获取时
int hour = calendar.get(Calendar.HOUR);
//获取分
int minute = calendar.get(Calendar.MINUTE);
//获取秒
int second = calendar.get(Calendar.SECOND);
//获取星期,英语国家星期从星期日开始计算
int weekday = calendar.get(Calendar.DAY_OF_WEEK);
//输出时间
System.out.println("现在是" + year + "年" + month + "月" + day +"日"
+ hour + "时" + minute + "分" + second + "秒" + "星期" + weekday);
输出:现在是2018年7月12日7时6分40秒星期5
一年后的今天
Calendar calendar = Calendar.getInstance();
//在年的基础上加1
calendar.add(Calendar.YEAR, 1);
//获取年
int year = calendar.get(Calendar.YEAR);
//获取月
int month = calendar.get(Calendar.MONDAY) + 1;
//获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("一年后的今天:" + year + "年" + month + "月" + day + "日");
获取任意一个月的最后一天
Calendar calendar = Calendar.getInstance();
//获取任意一个月的最后一天
//假设求7月的最后一天
int currentMonth = 7;
//先求出8月份的第一天,实际中这里7为外部传递进来的currentMonth变量
calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);
calendar.add(Calendar.DATE, -1);
//获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("7月份的最后一天为:" + day + "号");
设置日期
//设置日期
calendar.set(Calendar.YEAR, 2000);
System.out.println("现在是" + calendar.get(Calendar.YEAR) + "年");
calendar.set(2008, 8, 8);
//获取年
int year = calendar.get(Calendar.YEAR);
//获取月
int month = calendar.get(Calendar.MONTH);
//获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("现在是" + year + "年" + month + "月" + day + "日");
方法 | 描述 |
---|---|
public static Calendar getInstance() | 获取Calendar对象 |
public int get(int field) | 获取时间的某个值 |
public void add(int field, int amount) | 在当前时间的基础上加上一段时间 |
public final void set(int year, int month, int date) | 设置时间点 |
字段 | 描述 |
---|---|
DAY_OF_MONTH | 表示一个月中的某天 |
DAY_OF_WEEK | 表示一个星期中的某天 |
DAY_OF_YEAR | 表示当前年中的天数 |
HOUR_OF_DAY | 表示一天中的小时 |
YEAR | 表示年份 |
MONTH | 表示月份 |
WEEK_OF_MONTH | 表示单签月中的星期数 |