Java 日期时间
Java java.util.Date 类提供了操作日期与时间的一些方法
有两种方法生成一个 Date()
对象
- 没有任何参数,使用的是当前日期和时间来初始化对象
Date( )
- 接受一个参数,该参数是从 1970 年 1月1 日 0 时 0 分 0 秒起的毫秒数
Date(long millisec)
创建了 Date 对象以后,我们就可以调用 Date 类提供的下列方法
方法 | 描述 |
---|---|
boolean after(Date date) | 若当调用此方法的 Date 对象在指定日期之后返回 true,否则返回 false |
boolean before(Date date) | 若当调用此方法的 Date 对象在指定日期之前返回 true,否则返回 false |
Object clone() | 返回此对象的副本 |
int compareTo(Date date) | 比较当调用此方法的 Date 对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数 |
int compareTo(Object obj) | 若 obj 是 Date 类型则操作等同于 compareTo(Date) 。否则它抛出 ClassCastException |
boolean equals(Object date) | 当调用此方法的 Date对象和指定日期相等时候返回 true,否则返回 false |
long getTime() | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数 |
int hashCode( ) | 返回此对象的哈希码值 |
void setTime(long time) | 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期 |
String toString() | 转换 Date 对象为 String 表示形式,并返回该字符串 |
范例
下面的代码生成了一个 Date() 对象,然后调用 toString() 方法返回 String 形式的当前日期
import java.util.Date;
public class CurrentDate {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
}
}
编译运行以上 Java 代码,输出结果如下
Tue Jan 23 07:43:47 CST 2018
日期比较
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 类实现了这个接口
格式化日期
java.util.SimpleDateFormat 类是一个以语言环境敏感的方式来格式化和分析日期的类
SimpleDateFormat 可以自定义日期时间格式
import java.util.*;
import java.text.*;
public class SimpleDateFormatDemo {
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(ft.format(dNow));
}
}
编译运行以上 Java 代码,输出结果如下
Tue 2018.01.23 at 07:48:53 AM CST
上面这段代码中的
"E yyyy.MM.dd 'at' hh:mm:ss a zzz"
设定了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒
有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制
日期和时间的格式化编码
下表列出了 SimpleDateFormat 类支持的日期时间格式化符
字母 | 描述 | 范例 |
---|---|---|
G | 纪元标记 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一个月的日期 | 10 |
h | A.M./P.M. (1~12)格式小时 | 12 |
H | 一天中的小时 (0~23) | 22 |
m | 分钟数 | 30 |
s | 秒数 | 55 |
S | 毫秒数 | 234 |
E | 星期几 | Tuesday |
D | 一年中的日子 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
' | 文字定界符 | Delimiter |
" | 单引号 | ` |
使用 printf() 格式化日期
除了 SimpleDateFormat 类外,我们还可以使用 printf() 方法格式化时间和日期
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 |
范例
下面的代码使用 printf() 方法输出当前的日期
import java.util.Date;
public class PrintfDateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
//c的使用
System.out.printf("全部日期和时间信息:%tc%n",date);
//f的使用
System.out.printf("年-月-日格式:%tF%n",date);
//d的使用
System.out.printf("月/日/年格式:%tD%n",date);
//r的使用
System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
//t的使用
System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
//R的使用
System.out.printf("HH:MM格式(24时制):%tR",date);
}
}
编译运行以上 Java 代码,输出结果如下
全部日期和时间信息:星期二 一月 23 07:56:33 CST 2018
年-月-日格式:2018-01-23
月/日/年格式:01/23/18
HH:MM:SS PM格式(12时制):07:56:33 上午
HH:MM:SS格式(24时制):07:56:33
HH:MM格式(24时制):07:56
如果想要重复的格式化一个日期,那么上面这种方法就太低效了
当我们可以使用一个格式化字符串指出要被格式化的参数的索引
索引必须紧跟在 % 后面,而且必须以 $ 结束
import java.util.Date;
public class PrintfDateDemo2 {
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);
}
}
编译运行以上 Java 代码,输出结果如下
Due date: 一月 23, 2018
或者,我们可以使用 <
标志,它表明先前被格式化的参数要被再次使用
import java.util.Date;
public class PrintfDateDemo3 {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 显示格式化时间
System.out.printf("%s %tB %<te, %<tY",
"Due date:", date);
}
}
编译运行以上 Java 代码,输出结果如下
Due date: 一月 23, 2018
定义日期格式的转换符可以使日期通过指定的转换符生成新字符串
import java.util.*;
public class DateDemo2 {
public static void main(String args[]) {
Date date=new Date();
//b的使用,月份简称
String str=String.format(Locale.US,"英文月份简称:%tb",date);
System.out.println(str);
System.out.printf("本地月份简称:%tb%n",date);
//B的使用,月份全称
str=String.format(Locale.US,"英文月份全称:%tB",date);
System.out.println(str);
System.out.printf("本地月份全称:%tB%n",date);
//a的使用,星期简称
str=String.format(Locale.US,"英文星期的简称:%ta",date);
System.out.println(str);
//A的使用,星期全称
System.out.printf("本地星期的简称:%tA%n",date);
//C的使用,年前两位
System.out.printf("年的前两位数字(不足两位前面补0):%tC%n",date);
//y的使用,年后两位
System.out.printf("年的后两位数字(不足两位前面补0):%ty%n",date);
//j的使用,一年的天数
System.out.printf("一年中的天数(即年的第几天):%tj%n",date);
//m的使用,月份
System.out.printf("两位数字的月份(不足两位前面补0):%tm%n",date);
//d的使用,日(二位,不够补零)
System.out.printf("两位数字的日(不足两位前面补0):%td%n",date);
//e的使用,日(一位不补零)
System.out.printf("月份的日(前面不补0):%te",date);
}
}
编译运行以上 Java 代码,输出结果如下
英文月份简称:Jan
本地月份简称:一月
英文月份全称:January
本地月份全称:一月
英文星期的简称:Tue
本地星期的简称:星期二
年的前两位数字(不足两位前面补0):20
年的后两位数字(不足两位前面补0):18
一年中的天数(即年的第几天):023
两位数字的月份(不足两位前面补0):01
两位数字的日(不足两位前面补0):23
月份的日(前面不补0):23
解析字符串为时间
SimpleDateFormat 类的 parse() 方法可以按照指定的 SimpleDateFormat 对象的格式化存储来解析字符串
import java.util.*;
import java.text.*;
public class DateDemo3 {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
编译运行以上 Java 代码,输出结果如下
1818-11-11 Parses as Wed Nov 11 00:00:00 CST 1818
2018-02-14 Parses as Wed Feb 14 00:00:00 CST 2018
Java 休眠( sleep )
Thread.sleep() 方法可以使当前线程进入停滞状态 ( 阻塞当前线程 ),让出 CPU 的使用、目的是不让当前线程独自霸占该进程所获的 CPU 资源,以留一定时间给其他线程执行的机会
sleep() 方法的唯一参数是以毫秒表示的时间
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date( ) + "\n");
Thread.sleep(1000*3); // 休眠3秒
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
</pre>
[运行范例 »](https://www.twle.cn/t/yufei/java/basic/SleepDemo)
编译运行以上 Java 代码,输出结果如下
<pre style="box-sizing: border-box; overflow: hidden; font-family: monospace, monospace; font-size: 1em; margin-top: 0px; margin-bottom: 0px; overflow-wrap: break-word !important; display: block; border-radius: 2px; color: rgb(77, 77, 77); white-space: pre-wrap !important; padding: 10px;">$ java SleepDemo
Tue Jan 23 08:10:07 CST 2018
Tue Jan 23 08:10:11 CST 2018
</pre>
## 测量时间
**System.currentTimeMillis()** 方法返回当前程序运行的时间
我们可以在两段代码之间调用它来测试运行时间
<pre style="box-sizing: border-box; overflow: hidden; font-family: monospace, monospace; font-size: 1em; margin-top: 0px; margin-bottom: 0px; overflow-wrap: break-word !important; display: block; border-radius: 2px; color: rgb(77, 77, 77); white-space: pre-wrap !important; padding: 10px;">import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
</pre>
[运行范例 »](https://www.twle.cn/t/yufei/java/basic/DiffDemo)
编译运行以上 Java 代码,输出结果如下
<pre style="box-sizing: border-box; overflow: hidden; font-family: monospace, monospace; font-size: 1em; margin-top: 0px; margin-bottom: 0px; overflow-wrap: break-word !important; display: block; border-radius: 2px; color: rgb(77, 77, 77); white-space: pre-wrap !important; padding: 10px;">Tue Jan 23 08:12:43 CST 2018
Tue Jan 23 08:12:46 CST 2018
Difference is : 3044
</pre>
[← Java 数组](https://www.twle.cn/l/yufei/java/java-basic-array.html)[Java 日历 →](https://www.twle.cn/l/yufei/java/java-basic-calendar.html)
### Java 基础教程
<nav style="box-sizing: border-box; display: block;">[Java 基础教程](https://www.twle.cn/l/yufei/java/java-basic-index.html "Java 基础教程")[Java 简介](https://www.twle.cn/l/yufei/java/java-basic-intro.html "Java 简介")[Java 开发环境配置](https://www.twle.cn/l/yufei/java/java-basic-environment-setup.html "Java 开发环境配置")[Java 基础语法](https://www.twle.cn/l/yufei/java/java-basic-basic-syntax.html "Java 基础语法")[Java 对象和类](https://www.twle.cn/l/yufei/java/java-basic-object-classes.html "Java 对象和类")[Java 基本数据类型](https://www.twle.cn/l/yufei/java/java-basic-datatypes.html "Java 基本数据类型")[Java 常量](https://www.twle.cn/l/yufei/java/java-basic-constant.html "Java 常量")[Java 基本数据类型](https://www.twle.cn/l/yufei/java/java-basic-conversion.html "Java 基本数据类型")[Java 变量类型](https://www.twle.cn/l/yufei/java/java-basic-variable-types.html "Java 变量类型")[Java 访问控制符](https://www.twle.cn/l/yufei/java/java-basic-access-modifier.html "Java 访问控制符")[Java 非访问修饰符](https://www.twle.cn/l/yufei/java/java-basic-modifier-types.html "Java 非访问修饰符")[Java 运算符](https://www.twle.cn/l/yufei/java/java-basic-operators.html "Java 运算符")[Java 条件判断](https://www.twle.cn/l/yufei/java/java-basic-if-else-switch.html "Java 条件判断")[Java 条件之 if 语句](https://www.twle.cn/l/yufei/java/java-basic-if.html "Java 条件之 if 语句")[Java 条件之 if...else 语句](https://www.twle.cn/l/yufei/java/java-basic-ifelse.html "Java 条件之 if...else 语句")[Java 条件之 if...else if 语句](https://www.twle.cn/l/yufei/java/java-basic-multi-ifelse.html "Java 条件之 if...else if 语句")[Java 条件之嵌套 if 语句](https://www.twle.cn/l/yufei/java/java-basic-nested-if.html "Java 条件之嵌套 if 语句")[Java 条件之 switch 语句](https://www.twle.cn/l/yufei/java/java-basic-switch.html "Java 条件之 switch 语句")[Java 循环语句](https://www.twle.cn/l/yufei/java/java-basic-loop.html "Java 循环语句")[Java 循环之 while 语句](https://www.twle.cn/l/yufei/java/java-basic-while.html "Java 循环之 while 语句")[Java 循环之 do...while 语句](https://www.twle.cn/l/yufei/java/java-basic-dowhile.html "Java 循环之 do...while 语句")[Java 循环之 for 语句](https://www.twle.cn/l/yufei/java/java-basic-for.html "Java 循环之 for 语句")[Java break 语句](https://www.twle.cn/l/yufei/java/java-basic-break.html "Java break 语句")[Java continue 语句](https://www.twle.cn/l/yufei/java/java-basic-continue.html "Java continue 语句")[Java Number 类](https://www.twle.cn/l/yufei/java/java-basic-number.html "Java Number 类")[Java Math 类](https://www.twle.cn/l/yufei/java/java-basic-math.html "Java Math 类")[Java Character 类](https://www.twle.cn/l/yufei/java/java-basic-character.html "Java Character 类")[Java String 类](https://www.twle.cn/l/yufei/java/java-basic-string.html "Java String 类")[Java StringBuffer 和 StringBuilder 类](https://www.twle.cn/l/yufei/java/java-basic-stringbuffer.html "Java StringBuffer 和 StringBuilder 类")[Java 数组](https://www.twle.cn/l/yufei/java/java-basic-array.html "Java 数组")[Java 日期时间](https://www.twle.cn/l/yufei/java/java-basic-date-time.html "Java 日期时间")[Java 日历](https://www.twle.cn/l/yufei/java/java-basic-calendar.html "Java 日历")[Java 正则表达式](https://www.twle.cn/l/yufei/java/java-basic-regular-expressions.html "Java 正则表达式")[Java 方法](https://www.twle.cn/l/yufei/java/java-basic-methods.html "Java 方法")[Java 流 ( Stream )](https://www.twle.cn/l/yufei/java/java-basic-stream.html "Java 流 ( Stream )")[Java Scanner 类](https://www.twle.cn/l/yufei/java/java-basic-scanner.html "Java Scanner 类")[Java 读写文件](https://www.twle.cn/l/yufei/java/java-basic-files.html "Java 读写文件")[Java 目录操作方法](https://www.twle.cn/l/yufei/java/java-basic-dir.html "Java 目录操作方法")[Java 异常处理](https://www.twle.cn/l/yufei/java/java-basic-exceptions.html "Java 异常处理")[Java 源文件声明规则](https://www.twle.cn/l/yufei/java/java-basic-source-rule.html "Java 源文件声明规则")[Java 继承](https://www.twle.cn/l/yufei/java/java-basic-inheritance.html "Java 继承")[Java 重写 ( Override )](https://www.twle.cn/l/yufei/java/java-basic-override.html "Java 重写 ( Override )")[Java 重载 ( Overload )](https://www.twle.cn/l/yufei/java/java-basic-overload.html "Java 重载 ( Overload )")[Java 多态](https://www.twle.cn/l/yufei/java/java-basic-polymorphism.html "Java 多态")[Java 抽象类](https://www.twle.cn/l/yufei/java/java-basic-abstraction.html "Java 抽象类")[Java 封装](https://www.twle.cn/l/yufei/java/java-basic-encapsulation.html "Java 封装")[Java 接口](https://www.twle.cn/l/yufei/java/java-basic-interfaces.html "Java 接口")[Java 包 ( package )](https://www.twle.cn/l/yufei/java/java-basic-package.html "Java 包 ( package )")[Java 数据结构](https://www.twle.cn/l/yufei/java/java-basic-data-structures.html "Java 数据结构")[Java 集合框架](https://www.twle.cn/l/yufei/java/java-basic-collections.html "Java 集合框架")[Java 泛型](https://www.twle.cn/l/yufei/java/java-basic-generics.html "Java 泛型")[Java 序列化](https://www.twle.cn/l/yufei/java/java-basic-serialization.html "Java 序列化")[Java Socket 编程](https://www.twle.cn/l/yufei/java/java-basic-networking.html "Java Socket 编程")[Java URL 处理](https://www.twle.cn/l/yufei/java/java-basic-url-processing.html "Java URL 处理")[Java 发送邮件](https://www.twle.cn/l/yufei/java/java-basic-sending-email.html "Java 发送邮件")[Java 多线程编程](https://www.twle.cn/l/yufei/java/java-basic-multithreading.html "Java 多线程编程")[Java Applet 基础](https://www.twle.cn/l/yufei/java/java-basic-applet-basics.html "Java Applet 基础")[Java 文档注释](https://www.twle.cn/l/yufei/java/java-basic-documentation.html "Java 文档注释")[Java 范例](https://www.twle.cn/l/yufei/java/java-basic-examples.html "Java 范例")[Java 8 新特性](https://www.twle.cn/l/yufei/java/java-basic-java8-new-features.html "Java 8 新特性")[Java MySQL 连接](https://www.twle.cn/l/yufei/java/java-basic-mysql-connect.html "Java MySQL 连接")</nav>
</main>
♥ 简单教程,简单编程 - IT 入门首选站
Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.