DateExtUtil.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package com.fdkankan.common.util;
  2. import java.text.DateFormat;
  3. import java.text.SimpleDateFormat;
  4. import java.time.Instant;
  5. import java.time.ZoneId;
  6. import java.time.ZonedDateTime;
  7. import java.time.format.DateTimeFormatter;
  8. import java.util.Calendar;
  9. import java.util.Date;
  10. import java.util.GregorianCalendar;
  11. import java.util.Set;
  12. import java.util.TimeZone;
  13. import lombok.SneakyThrows;
  14. public class DateExtUtil {
  15. public static final String dateStyle = "yyyy-MM-dd HH:mm:ss";
  16. public static final String dateStyle2 = "HH:mm:ss";
  17. public static final String dateStyle3 = "HH:mm";
  18. public static final String dateStyle4 = "yyyy-MM-dd";
  19. public static final String dateStyle5 = "yyyy-MM";
  20. public static final String dateStyle6 = "yyyyMMdd";
  21. public static final String dateStyle7 = "yyMMddHHmm";
  22. public static final String dateStyle8 = "yyyy-MM-dd HH:mm";
  23. public static final String dateStyle9 = "yyyy.MM.dd";
  24. public static Date hoursCalculate(Date beginDate, int hours) {
  25. return timesCalculate(beginDate, hours, GregorianCalendar.HOUR);
  26. }
  27. public static Date timesCalculate(Date beginDate, int times, int type) {
  28. /*
  29. * GregorianCalendar类的add(int field,int amount)方法表示年月日加减.
  30. * field参数表示年,月,周,日等. amount参数表示要加减的数量.
  31. */
  32. GregorianCalendar gc = new GregorianCalendar();
  33. gc.setTime(beginDate);
  34. gc.add(type, times);
  35. return gc.getTime();
  36. }
  37. @SneakyThrows
  38. public static void main(String[] args) {
  39. // DateExtUtil.testInstant();
  40. DateExtUtil.testTransferBetweenZones();
  41. }
  42. //同一时刻,不同的时区的时间展现形式不一样,但是时刻一样,也就是时间戳是一样的
  43. public static void testOldDate(){
  44. Date currDate = new Date();
  45. //国际统一时间字符串格式 Wed Apr 27 16:17:30 CST 2022 CST (china standar time)
  46. System.out.println(currDate.toString());
  47. //本地时间字符串格式 2022-4-27 16:17:30
  48. System.out.println(currDate.toLocaleString());
  49. //国际统一GMT(格林威治标准时间)字符串格式 27 Apr 2022 08:17:30 GMT
  50. System.out.println(currDate.toGMTString());
  51. String[] availableIDs = TimeZone.getAvailableIDs();
  52. for (String availableID : availableIDs) {
  53. System.out.println(availableID);
  54. }
  55. Date bjDate = new Date();
  56. System.out.println("时间戳:" + bjDate.getTime());
  57. //得到纽约的时区
  58. TimeZone newYorkTimeZone = TimeZone.getTimeZone("America/New_York");
  59. DateFormat newYorkDateFormat = new SimpleDateFormat(dateStyle);
  60. newYorkDateFormat.setTimeZone(newYorkTimeZone);
  61. //纽约时间
  62. System.out.println("纽约时间:" + newYorkDateFormat.format(bjDate));
  63. //背景时间
  64. System.out.println("北京时间:" + new SimpleDateFormat(dateStyle).format(bjDate));
  65. }
  66. public static void testInstant(){
  67. Instant instant = Instant.ofEpochMilli(new Date().getTime());
  68. Date from = Date.from(instant);
  69. System.out.println(instant.toEpochMilli());
  70. System.out.println(from.getTime());
  71. System.out.println(instant);
  72. System.out.println(from);
  73. }
  74. public static void testTransferBetweenZones(){
  75. //获取所有时区的id
  76. Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
  77. //模拟数据库查询出来的时间
  78. Instant fromdb = Instant.now();
  79. ZonedDateTime sydney = ZonedDateTime.ofInstant(fromdb, ZoneId.of("Australia/Sydney"));
  80. ZonedDateTime beijing = ZonedDateTime.ofInstant(fromdb, ZoneId.systemDefault());
  81. System.out.println(sydney.format(DateTimeFormatter.ofPattern("dd-MM-yy HH:mm:ss")));
  82. System.out.println(beijing.format(DateTimeFormatter.ofPattern(dateStyle)));
  83. for (String availableZoneId : availableZoneIds) {
  84. System.out.println(availableZoneId);
  85. }
  86. }
  87. }