Java基础 专题
专题目录
您的位置:java > Java基础专题 > Java日期时间
Java日期时间
作者:--    发布时间:2019-11-20

java的java.util包提供了date类,该类封装了当前的日期和时间。date类支持两个构造函数,如下表所示。

编号 构造函数 描述
1 date() 此构造函数使用当前日期和时间来初始化对象。
2 date(long millisec) 此构造函数接受一个参数,该参数等于自1970年1月1日午夜以来经过的毫秒数。

以下是date类的方法列表 -

编号 方法 描述
1 boolean after(date date) 如果调用date对象包含的日期晚于date指定的日期,则返回true,否则返回false
2 boolean before(date date) 如果调用date对象包含的日期早于date指定的日期,则返回true,否则返回false
3 object clone( ) 复制调用的date对象。
4 int compareto(date date) 将调用对象的值与date的值进行比较。 如果值相等则返回0。 如果调用对象早于date,则返回负值。 如果调用对象晚于date,则返回正值。
5 int compareto(object obj) 如果obj对象是date类对象,则与compareto(date)操作相同。 否则,它会抛出classcastexception
6 boolean equals(object date) 如果调用date对象包含与date指定的时间和日期相同的时间和日期,则返回true,否则返回false
7 long gettime() 返回自1970年1月1日以来经过的毫秒数。
8 int hashcode() 返回调用对象的哈希码。
9 void settime(long time) 设置时间指定的时间和日期,表示从1970年1月1日午夜开始的经过时间(以毫秒为单位)。
10 string tostring( ) 将调用date对象转换为字符串并返回结果。

1. 获取当前日期和时间

这是一种在java中获取当前日期和时间的简单方法。可以使用date对象tostring()方法来打印当前日期和时间,如下所示 -

import java.util.date;
public class test {

   public static void main(string args[]) {
      // 实例化date对象
      date date = new date();

      // display time and date using tostring()
      system.out.println(date.tostring());
   }
}

执行上面示例代码,得到以下结果:

fri mar 15 13:00:37 cst 2020

2. 使用simpledateformat设置日期格式

simpledateformat是一个具体的类,用于以区域设置的方式格式化和解析日期。 simpledateformat用于从为日期时间格式选择用户定义的模式。

示例

import java.text.simpledateformat;
import java.util.date;

public class test {

    public static void main(string args[]) {
        date dnow = new date();
        simpledateformat ft = new simpledateformat("yyyy.mm.dd (e)'at' hh:mm:ss a zzz");

        system.out.println("current date: " + ft.format(dnow));

        simpledateformat ft2 = new simpledateformat("yyyy-mm-dd hh:mm:ss");

        system.out.println("current datetime: " + ft2.format(dnow));

    }
}

执行上面示例代码,得到以下结果:

current date: 2019.03.15 (星期五)at 01:04:52 下午 cst
current datetime: 2019-03-15 01:04:52

dateformat格式代码

要指定时间格式,请使用时间模式字符串。 在此模式中,所有ascii字母都保留为模式字母,其定义如下 -

编号 字符 描述 示全歼
1 g 时代指示符 ad
2 y 四位数的年份值 2019
3 m 月份 july or 07
4 d 10
5 h 小时 a.m./p.m. (1~12) 12
6 h 24小时制的小时表示 (0~23) 22
7 m 分钟 30
8 s 秒钟 55
9 s 毫秒 234
10 e 星期几 tuesday
11 d 一年中的第几天 360
12 f 一个月中的某一天 2 (second wed. in july)
13 w 一年中的第几个星期 40
14 w 一月中的第几个星期 1
15 a a.m./p.m. 标记 pm
16 k 小时 (1~24) 24
17 k 小时 a.m./p.m. (0~11) 10
18 z 时区 eastern standard time
19 转义文本 delimiter
20 ` 单引号 `

3. 使用printf格式化日期

使用printf方法来完成日期和时间格式化。使用双字母格式,以t开头并以表格的一个字母结尾,如下面的代码所示。

import java.text.simpledateformat;
import java.util.date;

public class test {

    public static void main(string args[]) {
        // instantiate a date object
        date date = new date();

        // display time and date
        string str = string.format("current date/time : %tc", date);

        system.out.printf(str);

    }
}

执行上面示例代码,得到以下结果:

current date/time : 星期五 三月 15 13:18:24 cst 2019

如果多次提供日期来格式化每个部分,那多少会有点愚蠢。 格式字符串可以指示要格式化的参数的索引。

索引必须紧跟%,并且必须以$结尾。

示例

import java.text.simpledateformat;
import java.util.date;

public class test {

    public static void main(string args[]) {
        // instantiate a date object
        date date = new date();

        // display time and date
        system.out.printf("%1$s %2$tb %2$td, %2$ty", "due date:", date);
    }
}

执行上面示例代码,得到以下结果:

due date: 三月 16, 2019

或者,可以使用<标志。 它表示再次使用与前面的格式规范相同的参数。

import java.text.simpledateformat;
import java.util.date;

public class test {

    public static void main(string args[]) {
        // instantiate a date object
        date date = new date();

        // display formatted date
        system.out.printf("%s %tb %<te, %<ty", "due date:", date);
    }
}

执行上面示例代码,得到以下结果:

due date: 三月 16, 2019

4. 日期和时间转换字符

示例

编号 字符 描述 示例
1 c 完全日期和时间 mon may 04 09:51:52 cdt 2019
2 f iso 8601 date 2004-02-09
3 d u.s. formatted date (month/day/year) 02/09/2004
4 t 24小时时间 18:05:19
5 r 12小时时间 06:05:19 pm
6 r 24小时时间, 无秒钟。 18:05
7 y 四位数年份(前导零) 2019
8 y 年份的最后两位数(带前导零) 19
9 c 年份的前两位数(带前导零) 20
10 b 月份全名称 february
11 b 缩写的月份名称 feb
12 m 两位数月份(带前导零) 02
13 d 两位数的日期(带前导零) 03
14 e 两位数的日期(没有前导零) 9
15 a 完整的工作日名称 monday
16 a 缩写的工作日名称 mon
17 j 一年中的三位数日(带前导零) 069
18 h 两位数小时(前导零),介于00和23之间 18
19 k 两位数小时(不带前导零),介于0和23之间 18
20 i 两位数小时(前导零),介于01和12之间 06
21 l 两位数小时(不带前导零),介于1和12之间 6
22 m 两位数分钟(带前导零) 05
23 s 两位数秒(带前导零) 19
24 l 三位数毫秒(带前导零) 047
25 n 九位纳秒(带前导零) 047000000
26 p 大写上午或下午标记 pm
27 p 小写上午或下午标记 pm
28 z gmt的rfc 822数字偏移量 -0800
29 z 时区 pst
30 s 自1970-01-01 00:00:00 gmt以来的秒数 1078884319
31 q 自1970-01-01 00:00:00 gmt以来的毫秒数 1078884319047

还有其他与日期和时间相关的有用类。 有关更多详细信息,请参阅java标准文档。

5. 将字符串解析为日期

simpledateformat类有一些额外的方法,特别是parse(),它用于根据存储在给定的simpledateformat对象中的格式来解析字符串。

示例

import java.util.*;
import java.text.*;

public class test {

    public static void main(string args[]) {
        simpledateformat ft = new simpledateformat("yyyy-mm-dd");
        string input = args.length == 0 ? "2019-11-11" : args[0];

        system.out.print(input + " 解析为:");
        date t;
        try {
            t = ft.parse(input);
            system.out.println(t);
        } catch (parseexception e) {
            system.out.println("unparseable using " + ft);
        }
    }
}

执行上面示例代码,得到以下结果:

2019-11-11 解析为:mon nov 11 00:00:00 cst 2019

6. 睡眠一段时间

可以在计算机生命周期的任何时间段内睡眠。 例如,以下程序将睡眠3秒钟 -

import java.util.*;
import java.text.*;

public class test {

    public static void main(string args[]) {
        try {
            system.out.println(new date());
            thread.sleep(5 * 60 * 10);
            system.out.println(new date());
        } catch (exception e) {
            system.out.println("got an exception!");
        }
    }
}

执行上面示例代码,得到以下结果:

sat mar 16 15:51:43 cst 2019
sat mar 16 15:51:46 cst 2019

7. 测量经过的时间

有时,可能需要以毫秒为单位测量时间点。 重写上面的例子 -

import java.util.*;
import java.text.*;

public class test {

    public static void main(string args[]) {
        try {
            long start = system.currenttimemillis();
            system.out.println(new date());

            thread.sleep(5 * 60 * 10);
            system.out.println(new date());

            long end = system.currenttimemillis();
            long diff = end - start;
            system.out.println("时间差为: " + diff);
        } catch (exception e) {
            system.out.println("got an exception!");
        }
    }
}

执行上面示例代码,得到以下结果:

sat mar 16 15:53:25 cst 2019
sat mar 16 15:53:28 cst 2019
difference is : 3021

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册