Java Calendar 日历类的时间操作 Timestamp Date Calendar 相互转换

作者 : admin 本文共5904个字,预计阅读时间需要15分钟 发布时间: 2021-07-20 共7人阅读

Java Calendar 日历类的时间操作,这也许是 Java 环境下创建和管理日历及操作时间最简单的一个方案了,示范代码也很简单。

 

注意事项:

Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示。

而 Calendar.DAY_OF_WEEK 定义值如下,每周从 SUNDAY 开始,从 1 ~ 7:

Calendar.SUNDAY = 1
Calendar.MONDAY = 2
Calendar.TUESDAY = 3
Calendar.WEDNESDAY = 4
Calendar.THURSDAY = 5
Calendar.FRIDAY = 6
Calendar.SATURDAY = 7

SimpleDateFormat 的格式定义

 

Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 199696
Y Week year Year 200909
M Month in year (context sensitive) Month JulyJul07
L Month in year (standalone form) Month JulyJul07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day name in week Text TuesdayTue
u Day number of week (1 = Monday, …, 7 = Sunday) Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard TimePSTGMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08-0800-08:00

 

Java Calendar 演示代码如下:

 

  1. package demo;
  2. import java.util.Date;
  3. import java.text.SimpleDateFormat;
  4. import java.text.DateFormat;
  5. import java.text.ParseException;
  6. import java.util.Calendar;
  7. public class Test
  8. {
  9. public Test()
  10. {
  11. }
  12. public static void main(String[] args)
  13. {
  14. // 字符串转换日期格式
  15. // DateFormat fmtDateTime = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
  16. // 接收传入参数
  17. // String strDate = args[1];
  18. // 得到日期格式对象
  19. // Date date = fmtDateTime.parse(strDate);
  20. // 完整显示今天日期时间
  21. String str = (new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss:SSS”)).format(new Date());
  22. System.out.println(str);
  23. // 创建 Calendar 对象
  24. Calendar calendar = Calendar.getInstance();
  25. try
  26. {
  27. // 对 calendar 设置时间的方法
  28. // 设置传入的时间格式
  29. SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-M-d H:m:s”);
  30. // 指定一个日期
  31. Date date = dateFormat.parse(“2013-6-1 13:24:16”);
  32. // 对 calendar 设置为 date 所定的日期
  33. calendar.setTime(date);
  34. // 按特定格式显示刚设置的时间
  35. str = (new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss:SSS”)).format(calendar.getTime());
  36. System.out.println(str);
  37. }
  38. catch (ParseException e)
  39. {
  40. e.printStackTrace();
  41. }
  42. // 或者另一種設置 calendar 方式
  43. // 分別爲 year, month, date, hourOfDay, minute, second
  44. calendar = Calendar.getInstance();
  45. calendar.set(2013, 1, 2, 17, 35, 44);
  46. str = (new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss:SSS”)).format(calendar.getTime());
  47. System.out.println(str);
  48. // Calendar 取得当前时间的方法
  49. // 初始化 (重置) Calendar 对象
  50. calendar = Calendar.getInstance();
  51. // 或者用 Date 来初始化 Calendar 对象
  52. calendar.setTime(new Date());
  53. // setTime 类似上面一行
  54. // Date date = new Date();
  55. // calendar.setTime(date);
  56. str = (new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss:SSS”)).format(calendar.getTime());
  57. System.out.println(str);
  58. // 显示年份
  59. int year = calendar.get(Calendar.YEAR);
  60. System.out.println(“year is = “ + String.valueOf(year));
  61. // 显示月份 (从0开始, 实际显示要加一)
  62. int month = calendar.get(Calendar.MONTH);
  63. System.out.println(“nth is = “ + (month + 1));
  64. // 本周几
  65. int week = calendar.get(Calendar.DAY_OF_WEEK);
  66. System.out.println(“week is = “ + week);
  67. // 今年的第 N 天
  68. int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR);
  69. System.out.println(“DAY_OF_YEAR is = “ + DAY_OF_YEAR);
  70. // 本月第 N 天
  71. int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH);
  72. System.out.println(“DAY_OF_MONTH = “ + String.valueOf(DAY_OF_MONTH));
  73. // 3小时以后
  74. calendar.add(Calendar.HOUR_OF_DAY, 3);
  75. int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY);
  76. System.out.println(“HOUR_OF_DAY + 3 = “ + HOUR_OF_DAY);
  77. // 当前分钟数
  78. int MINUTE = calendar.get(Calendar.MINUTE);
  79. System.out.println(“MINUTE = “ + MINUTE);
  80. // 15 分钟以后
  81. calendar.add(Calendar.MINUTE, 15);
  82. MINUTE = calendar.get(Calendar.MINUTE);
  83. System.out.println(“MINUTE + 15 = “ + MINUTE);
  84. // 30分钟前
  85. calendar.add(Calendar.MINUTE, –30);
  86. MINUTE = calendar.get(Calendar.MINUTE);
  87. System.out.println(“MINUTE – 30 = “ + MINUTE);
  88. // 7天前
  89. calendar.add(Calendar.DAY_OF_YEAR, –7);
  90. // 显示当月 x 号
  91. int day_of_month = calendar.get(Calendar.DAY_OF_MONTH);
  92. System.out.println(“day_of_month -7 = “ + day_of_month);
  93. // 格式化显示
  94. str = (new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss:SS”)).format(calendar.getTime());
  95. System.out.println(str);
  96. // 重置 Calendar 显示当前时间
  97. calendar.setTime(new Date());
  98. str = (new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss:SS”)).format(calendar.getTime());
  99. System.out.println(str);
  100. // 创建一个 Calendar 用于比较时间
  101. Calendar calendarNew = Calendar.getInstance();
  102. // 设定为 5 小时以前,后者大,显示 -1
  103. calendarNew.add(Calendar.HOUR, –5);
  104. System.out.println(“时间比较:” + calendarNew.compareTo(calendar));
  105. // 设定7小时以后,前者大,显示 1
  106. calendarNew.add(Calendar.HOUR, +7);
  107. System.out.println(“时间比较:” + calendarNew.compareTo(calendar));
  108. // 退回 2 小时,时间相同,显示 0
  109. calendarNew.add(Calendar.HOUR, –2);
  110. System.out.println(“时间比较:” + calendarNew.compareTo(calendar));
  111. }
  112. }

 

运行结果

2013-06-07 23:27:34:195
2013-06-01 13:24:16:000
2013-02-02 17:35:44:197
2013-06-07 23:27:34:197
year is = 2013
nth is = 6
week is = 6
DAY_OF_YEAR is = 158
DAY_OF_MONTH = 7
HOUR_OF_DAY + 3 = 2
MINUTE = 27
MINUTE + 15 = 42
MINUTE - 30 = 12
2013-06-08 02:12:34:197
2013-06-07 23:27:34:199
时间比较:-1
时间比较:1
时间比较:0

要计算时间差,可用 Calendar.getTimeInMillis() 取得两个时间的毫秒级的时间差,再加以换算即可,比如获得相差天数,代码如下:

  1. // 得微秒级时间差
  2. long val = calendarEnd.getTimeInMillis() – calendarBegin.getTimeInMillis();
  3. // 换算后得到天数
  4. long day = val / (1000 * 60 * 60 * 24);

 

其他与 date 相关的类型转换代码如下。

Timestamp 类型转换为 Date 类型:

  1. Timestamp stamp = new Timestamp(System.currentTimeMillis());
  2. Date date = new Date(stamp.getTime());
  3. System.out.println(date);

 

Timestamp 类型转换为 Calendar 类型:

  1. // 获取 Timestamp 类型时间
  2. Timestamp timestamp = new Timestamp(System.currentTimeMillis());
  3. // 转换为 Calendar 类型,SUN 也推荐用 Calendar 处理时间信息
  4. Calendar calendar = Calendar.getInstance();
  5. calendar.setTimeInMillis(timestamp.getTime());

 

Date 类型转换为 Calendar 类型:

  1. // Date 向 Calendar 赋值
  2. calendar.setTime(date);

 

Calendar 类型转换为 Timestamp 类型:

  1. // 创建 Calendar 对象,也同时获取了当前时间
  2. Calendar calendar = Calendar.getInstance();
  3. // 转换为 Timestamp 类型对象
  4. Timestamp timestamp = new Timestamp(calendar.getTimeInMillis());
  5. System.out.println(timestamp);

 

Calendar 类型转换为 Date 类型:

  1. // Calendar 对象类型转换为 Date 对象类型
  2. Calendar calendar = Calendar.getInstance();
  3. java.util.Date date = calendar.getTime();
  4. System.out.println(date);

 

StringDate 转换为 Date 或者 Timestamp

  1. /* 将字符串日期或者日期时间转换为 timestamp 格式 */
  2. try
  3. {
  4. // 一个字符串日期
  5. String strDate = “2020-01-31”;
  6. // 设置传入格式
  7. // yyyy-MM-dd 或者完整的 yyyy-MM-dd HH:mm:ss
  8. DateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
  9. Date date = dateFormat.parse(strDate);
  10. // 创建 Calendar 用于处理 date 对象
  11. Calendar calendar = Calendar.getInstance();
  12. calendar.setTime(date);
  13. // 由 calendar 对象生成 timestamp
  14. Timestamp timestamp = new Timestamp(calendar.getTimeInMillis());
  15. System.out.printf(timestamp);
  16. }
  17. catch (Exception e)
  18. {
  19. e.printStackTrace();
  20. }

滴石it网-Java学习中高级和架构师教程_Java企业级开发项目实战下载 » Java Calendar 日历类的时间操作 Timestamp Date Calendar 相互转换

常见问题FAQ

发表评论

开通VIP 享更多特权,建议使用QQ登录