java周数与相应时间转换实体类

港控/mmm° 2022-05-19 04:22 267阅读 0赞

前言

最近开发遇到查询第几周内数据的问题,从而计算环比、同比,这就需要知道周数对应的日期,上网搜索并总结出一个实体类,方便以后开发。

具体代码

  1. import java.text.SimpleDateFormat;
  2. import java.time.YearMonth;
  3. import java.time.temporal.ChronoUnit;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. import java.util.GregorianCalendar;
  7. public class DateUtil {
  8. /** * 取得当前日期是多少周 * * @param date * @return */
  9. public int getWeekOfYear(Date date) {
  10. Calendar c = new GregorianCalendar();
  11. c.setFirstDayOfWeek(Calendar.MONDAY);
  12. c.setMinimalDaysInFirstWeek(7);
  13. c.setTime (date);
  14. return c.get(Calendar.WEEK_OF_YEAR);
  15. }
  16. /** * 得到某一年周的总数 * * @param year * @return */
  17. public int getMaxWeekNumOfYear(int year) {
  18. Calendar c = new GregorianCalendar();
  19. c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
  20. return getWeekOfYear(c.getTime());
  21. }
  22. /** * 得到某年某周的第一天 * * @param year(yyyy) * @param week * @return */
  23. public String getFirstDayOfWeek(String year, String week) {
  24. Calendar c = new GregorianCalendar();
  25. c.set(Calendar.YEAR, Integer.valueOf(year));
  26. c.set (Calendar.MONTH, Calendar.JANUARY);
  27. c.set(Calendar.DATE, 1);
  28. Calendar cal = (GregorianCalendar) c.clone();
  29. cal.add(Calendar.DATE, (Integer.valueOf(week)-1) * 7);
  30. return getFirstDayOfWeek(cal.getTime());
  31. }
  32. /** * 得到某年某周的最后一天 * * @param year(yyyy) * @param week * @return */
  33. public String getLastDayOfWeek(String year, String week) {
  34. Calendar c = new GregorianCalendar();
  35. c.set(Calendar.YEAR, Integer.valueOf(year));
  36. c.set(Calendar.MONTH, Calendar.JANUARY);
  37. c.set(Calendar.DATE, 1);
  38. Calendar cal = (GregorianCalendar) c.clone();
  39. cal.add(Calendar.DATE , (Integer.valueOf(week)-1) * 7);
  40. return getLastDayOfWeek(cal.getTime());
  41. }
  42. /** * 得到某年前一年某周的第一天 * * @param year(yyyy) * @param week * @return */
  43. public String getLastYearFirstDayOfWeek(String year, String week) {
  44. Calendar c = new GregorianCalendar();
  45. c.set(Calendar.YEAR, Integer.valueOf(year)-1);
  46. c.set (Calendar.MONTH, Calendar.JANUARY);
  47. c.set(Calendar.DATE, 1);
  48. Calendar cal = (GregorianCalendar) c.clone();
  49. cal.add(Calendar.DATE, (Integer.valueOf(week)-1) * 7);
  50. return getFirstDayOfWeek(cal.getTime ());
  51. }
  52. /** * 得到某年前一年某周的最后一天 * * @param year(yyyy) * @param week * @return */
  53. public String getLastYearLastDayOfWeek(String year, String week) {
  54. Calendar c = new GregorianCalendar();
  55. c.set(Calendar.YEAR, Integer.valueOf(year)-1);
  56. c.set(Calendar.MONTH, Calendar.JANUARY);
  57. c.set(Calendar.DATE, 1);
  58. Calendar cal = (GregorianCalendar) c.clone();
  59. cal.add(Calendar.DATE , (Integer.valueOf(week)-1) * 7);
  60. return getLastDayOfWeek(cal.getTime());
  61. }
  62. /** * 取得指定日期所在周的第一天 * * @param date * @return String(yyyyMMdd) */
  63. public String getFirstDayOfWeek(Date date) {
  64. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  65. Calendar c = new GregorianCalendar();
  66. c.setFirstDayOfWeek(Calendar.MONDAY);
  67. c.setTime(date);
  68. c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
  69. return sdf.format(c.getTime());
  70. }
  71. /** * 取得指定日期所在周的最后一天 * * @param date * @return String(yyyyMMdd) */
  72. public String getLastDayOfWeek(Date date) {
  73. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  74. Calendar c = new GregorianCalendar();
  75. c.setFirstDayOfWeek(Calendar.MONDAY);
  76. c.setTime(date);
  77. c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
  78. return sdf.format(c.getTime());
  79. }
  80. /** * 取得当前日期所在周的第一天 * * @return */
  81. public Date getFirstDayOfWeek() {
  82. Calendar c = new GregorianCalendar();
  83. c.setFirstDayOfWeek(Calendar.MONDAY);
  84. c.setTime(new Date());
  85. c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
  86. return c.getTime ();
  87. }
  88. /** * 取得当前日期所在周的最后一天 * * @return */
  89. public Date getLastDayOfWeek() {
  90. Calendar c = new GregorianCalendar();
  91. c.setFirstDayOfWeek(Calendar.MONDAY);
  92. c.setTime(new Date());
  93. c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
  94. return c.getTime();
  95. }
  96. /** * 获取指定月所在的最后一天 */
  97. public String getLastDayOfMonth(String year,String month) {
  98. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  99. Calendar cal = Calendar.getInstance();
  100. cal.set(Calendar.YEAR,Integer.valueOf(year));
  101. cal.set(Calendar.MONTH, Integer.valueOf(month)-1);
  102. int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
  103. cal.set(Calendar.DAY_OF_MONTH, lastDay);
  104. return sdf.format(cal.getTime());
  105. }
  106. /** * 获取指定月前一个月所在的最后一天 */
  107. public String getLastMonthLastDayOfMonth(String year,String month) {
  108. YearMonth yearMonth = YearMonth.parse(year+"-"+month);
  109. String s=yearMonth.minus(1, ChronoUnit.MONTHS).toString();
  110. String[] arr = s.split("-");
  111. SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
  112. Calendar cal = Calendar.getInstance();
  113. cal.set(Calendar.YEAR,Integer.valueOf(arr[0]));
  114. cal.set(Calendar.MONTH, Integer.valueOf(arr[1])-1);
  115. int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
  116. cal.set(Calendar.DAY_OF_MONTH, lastDay);
  117. return sdf1.format(cal.getTime());
  118. }
  119. /** * 获取指定日期对应去年的这天 * @param day(yyyyMMdd) */
  120. public String getNowOfLastYear(String day) {
  121. return String.valueOf(Integer.parseInt(day.substring(0,4)) - 1)+day.substring(4,day.length());
  122. }
  123. /** * 获得指定日期的前一天 * @param day(yyyyMMdd) * @return * @throws Exception */
  124. public String getLastDayOfDay(String day){
  125. Calendar c = Calendar.getInstance();
  126. Date date=null;
  127. try {
  128. date = new SimpleDateFormat("yyyyMMdd").parse(day);
  129. } catch (Exception e) {
  130. e.printStackTrace();
  131. }
  132. c.setTime(date);
  133. int day=c.get(Calendar.DATE);
  134. c.set(Calendar.DATE,day-1);
  135. String dayBefore=new SimpleDateFormat("yyyyMMdd").format(c.getTime());
  136. return dayBefore;
  137. }
  138. }

后记

实际运用可以调整传入参数的类型,和返回值的类型,方便开发。

发表评论

表情:
评论列表 (有 0 条评论,267人围观)

还没有评论,来说两句吧...

相关阅读

    相关 根据时间获取

    1 问题 怎么设计函数使得初始时间与自己目前时间间隔来推出周数。 2 方法 利用datatime 函数,在设计一个calculate函数接受初始时间与截止时间 代码清单

    相关 C#实体XML相互转换

    1、实体类与XML相互转换 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化。 把XML转换成相应的实体类,需要使用到Xml