亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java - 日期和时间

Java 提供 日期 java.util 中可用的类 package,这个类封装了当前的日期和时间。

Date 类支持两种构造函数,如下表所示。

Sr.No. 构造函数和描述
1

日期( )

此构造函数使用当前日期和时间初始化对象。

2

日期(长毫秒)

此构造函数接受一个参数,该参数等于自 1970 年 1 月 1 日午夜以来经过的毫秒数。

以下是日期类的方法。

Sr.No. 方法和说明
1

boolean after(Date date)

如果调用的 Date 对象包含的日期晚于 date 指定的日期,则返回 true,否则返回 false。

2

boolean before(日期日期)

如果调用的 Date 对象包含的日期早于 date 指定的日期,则返回 true,否则返回 false。

3

对象克隆( )

复制调用的 Date 对象。

4

int compareTo(日期日期)

将调用对象的值与日期的值进行比较。如果值相等,则返回 0。如果调用对象早于日期,则返回负值。如果调用对象晚于日期,则返回正值。

5

int compareTo(Object obj)

如果 obj 属于 Date 类,则与 compareTo(Date) 的操作相同。否则,它会抛出 ClassCastException。

6

布尔等于(对象日期)

如果调用的 Date 对象包含与 date 指定的时间和日期相同的时间和日期,则返回 true,否则返回 false。

7

long getTime( )

返回自 1970 年 1 月 1 日以来经过的毫秒数。

8

int hashCode( )

返回调用对象的哈希码。

9

void setTime(长时间)

设置时间指定的时间和日期,时间表示从 1970 年 1 月 1 日午夜开始经过的时间(以毫秒为单位)。

10

字符串 toString( )

将调用的 Date 对象转换为字符串并返回结果。

获取当前日期和时间

这是在 Java 中获取当前日期和时间的一种非常简单的方法。您可以使用带有 toString() 的简单 Date 对象 打印当前日期和时间的方法如下 -

示例

现场演示
import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();

      // display time and date using toString()
      System.out.println(date.toString());
   }
}

这将产生以下结果 -

输出

on May 04 09:51:52 CDT 2009

日期比较

以下是比较两个日期的三种方法 -

使用 SimpleDateFormat 格式化日期

SimpleDateFormat 是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。 SimpleDateFormat 允许您从选择任何用户定义的日期时间格式模式开始。

示例

现场演示
import java.util.*;
import java.text.*;

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: Sun 2004.07.18 at 04:14:09 PM PDT

简单的 DateFormat 格式代码

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

字符 描述 示例
G 时代代号 广告
四位数年份 2001
M 一年中的月份 7 月或 07 日
d 一个月中的一天 10
h 上午/下午的时间(1~12) 12
H 一天中的小时(0~23) 22
m 小时分钟 30
s 一分钟秒 55
S 毫秒 234
E 星期几 星期二
D 一年中的一天 360
F 一个月的星期几 2(7 月的第二个星期三)
w 一年中的一周 40
W 一个月中的一周 1
一个 上午/下午标记 下午
k 一天中的小时(1~24) 24
K 上午/下午的时间(0~11) 10
z 时区 东部标准时间
' 文本转义 分隔符
" 单引号 `

使用 printf 格式化日期

使用 printf 可以很容易地完成日期和时间格式化 方法。您使用两个字母的格式,以 t 开头 并以表格中的一个字母结尾,如下代码所示。

示例

现场演示
import java.util.Date;
public class DateDemo {

   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 : Sat Dec 15 16:37:57 MST 2012

如果您必须多次提供日期来格式化每个部分,那就有点傻了。因此,格式字符串可以指示要格式化的参数的索引。

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

示例

现场演示
import java.util.Date;
public class DateDemo {

   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: February 09, 2004

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

示例

现场演示
import java.util.Date;
public class DateDemo {

   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: February 09, 2004

日期和时间转换字符

字符 描述 示例
c 完成日期和时间 2009 年 5 月 4 日星期一 09:51:52 CDT
F ISO 8601 日期 2004-02-09
D 美国格式化日期(月/日/年) 02/09/2004
T 24 小时制 18:05:19
r 12 小时制 06:05:19 下午
R 24 小时制,无秒 18:05
四位数年份(前导零) 2004
y 年份的最后两位数字(前导零) 04
C 年份的前两位数字(前导零) 20
B 完整的月份名称 二月
b 缩写月份名称 二月
m 两位数月份(前导零) 02
d 两位数的日期(前导零) 03
e 两位数的日期(没有前导零) 9
一个 完整的工作日名称 星期一
一个 工作日的缩写名称 星期一
j 一年中的三位数字(带前导零) 069
H 两位数小时(带前导零),介于 00 和 23 之间 18
k 两位数小时(不带前导零),介于 0 和 23 之间 18
两位数小时(前导零),介于 01 和 12 之间 06
l 两位数小时(不带前导零),介于 1 和 12 之间 6
M 两位数分钟(带前导零) 05
S 两位数秒(前导零) 19
L 三位毫秒(前导零) 047
N 九位纳秒(带前导零) 047000000
P 大写的上午或下午标记 下午
p 小写的上午或下午标记 下午
z RFC 822 与 GMT 的数字偏移量 -0800
Z 时区 太平洋标准时间
s 自 1970-01-01 00:00:00 GMT 以来的秒数 1078884319
Q 自 1970-01-01 00:00:00 GMT 以来的毫秒数 1078884319047

还有其他与日期和时间相关的有用类。更多细节可以参考Java标准文档。

将字符串解析为日期

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

示例

现场演示
import java.util.*;
import java.text.*;
  
public class DateDemo {

   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); 
      }
   }
}

上述程序的示例运行将产生以下结果 -

输出

1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818

睡一会儿

您可以休眠从一毫秒到计算机生命周期的任何时间段。例如,下面的程序会休眠 3 秒 -

示例

现场演示
import java.util.*;
public class SleepDemo {

   public static void main(String args[]) {
      try { 
         System.out.println(new Date( ) + "\n"); 
         Thread.sleep(5*60*10); 
         System.out.println(new Date( ) + "\n"); 
      } catch (Exception e) {
         System.out.println("Got an exception!"); 
      }
   }
}

这将产生以下结果 -

输出

Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009

测量经过时间

有时,您可能需要以毫秒为单位测量时间点。所以让我们再次重写上面的例子 -

示例

现场演示
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!");
      }
   }
}

这将产生以下结果 -

输出

Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993

公历日历类

GregorianCalendar 是 Calendar 类的具体实现,它实现了您熟悉的普通公历。我们没有在本教程中讨论 Calendar 类,您可以查找标准 Java 文档。

getInstance() Calendar 的方法返回一个 GregorianCalendar,该 GregorianCalendar 使用默认语言环境和时区中的当前日期和时间进行初始化。 GregorianCalendar 定义了两个字段:AD 和 BC。这些代表了公历定义的两个时代。

GregorianCalendar 对象也有几个构造函数 -

Sr.No. 构造函数和描述
1

公历()

使用默认时区中的当前时间和默认语言环境构造一个默认的 GregorianCalendar。

2

GregorianCalendar(int year, int month, int date)

构造一个 GregorianCalendar,其给定日期设置在默认时区和默认语言环境中。

3

GregorianCalendar(int year, int month, int date, int hour, int minute)

构造一个带有给定日期和时间的 GregorianCalendar,该日期和时间设置为具有默认语言环境的默认时区。

4

GregorianCalendar(int year, int month, int date, int hour, int minute, int second)

构造一个带有给定日期和时间的 GregorianCalendar,该日期和时间设置为具有默认语言环境的默认时区。

5

GregorianCalendar(Locale aLocale)

根据给定语言环境的默认时区中的当前时间构造一个 GregorianCalendar。

6

公历(时区)

根据给定时区的当前时间,使用默认语言环境构造一个 GregorianCalendar。

7

GregorianCalendar(TimeZone zone, Locale aLocale)

根据给定时区和给定语言环境中的当前时间构造一个 GregorianCalendar。

以下是 GregorianCalendar 类提供的一些有用的支持方法列表 -

Sr.No. 方法和说明
1

void add(int field, int amount)

根据日历的规则,将指定(签名)的时间量添加到给定的时间字段。

2

受保护的 void computeFields()

将 UTC 以毫秒为单位转换为时间字段值。

3

受保护的 void computeTime()

覆盖日历将时间字段值转换为以毫秒为单位的 UTC。

4

布尔等于(对象 obj)

将此 GregorianCalendar 与对象引用进行比较。

5

int get(int 字段)

获取给定时间字段的值。

6

int getActualMaximum(int field)

在给定当前日期的情况下,返回此字段可能具有的最大值。

7

int getActualMinimum(int field)

在给定当前日期的情况下,返回此字段可能具有的最小值。

8

int getGreatestMinimum(int field)

如果变化,则返回给定字段的最高最小值。

9

日期 getGregorianChange()

获取公历更改日期。

10

int getLeastMaximum(int field)

如果变化,则返回给定字段的最低最大值。

11

int getMaximum(int field)

返回给定字段的最大值。

12

日期 getTime()

获取此日历的当前时间。

13

长 getTimeInMillis()

获取此日历的当前时间作为 long。

14

时区 getTimeZone()

获取时区。

15

int getMinimum(int field)

返回给定字段的最小值。

16

int hashCode()

覆盖 hashCode。

17

boolean isLeapYear(int year)

确定给定年份是否为闰年。

18

void roll(int field, boolean up)

在给定时间字段上添加或减去(上/下)单个时间单位,而不更改更大的字段。

19

void set(int field, int value)

使用给定值设置时间字段。

20

void set(int year, int month, int date)

设置字段年、月和日期的值。

21

void set(int year, int month, int date, int hour, int minute)

设置年、月、日、小时和分钟字段的值。

22

void set(int year, int month, int date, int hour, int minute, int second)

设置年、月、日、时、分、秒字段的值。

23

void setGregorianChange(日期日期)

设置公历更改日期。

24

void setTime(日期日期)

使用给定的日期设置此日历的当前时间。

25

void setTimeInMillis(long millis)

根据给定的 long 值设置此日历的当前时间。

26

void setTimeZone(TimeZone 值)

使用给定的时区值设置时区。

27

字符串 toString()

返回此日历的字符串表示形式。

示例

现场演示
import java.util.*;
public class GregorianCalendarDemo {

   public static void main(String args[]) {
      String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", 
         "Oct", "Nov", "Dec"};
      
      int year;
      // Create a Gregorian calendar initialized
      // with the current date and time in the
      // default locale and timezone.
      
      GregorianCalendar gcalendar = new GregorianCalendar();
      
      // Display current time and date information.
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));

      // Test if the current year is a leap year
      if(gcalendar.isLeapYear(year)) {
         System.out.println("The current year is a leap year");
      }else {
         System.out.println("The current year is not a leap year");
      }
   }
}

这将产生以下结果 -

输出

Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year

关于 Calendar 类中可用常量的完整列表,您可以参考标准 Java 文档。


java

  1. C# 类和对象
  2. 如何在 Python 中获取当前日期和时间?
  3. Java 变量和文字
  4. Java 表达式、语句和块
  5. Java 类和对象
  6. Java 抽象类和抽象方法
  7. Java 嵌套和内部类
  8. Java 单例类
  9. Java 抛出和抛出
  10. Java 自动装箱和拆箱
  11. Java - 序列化
  12. C++ 日期和时间