转至博客Java对日期Date类进行加减运算一二三:https://blog.csdn.net/hacker_lees/article/details/74351838

废话不多 ,代码说话:
  • 1
  • 2

一、充分利用SimpleDateFormat

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class DateTestUtil {public static void main(String[] args) throws Exception {SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");String str="20110823";Date dt=sdf.parse(str);Calendar rightNow = Calendar.getInstance();rightNow.setTime(dt);rightNow.add(Calendar.YEAR,-1);//日期减1年rightNow.add(Calendar.MONTH,3);//日期加3个月rightNow.add(Calendar.DAY_OF_YEAR,10);//日期加10天Date dt1=rightNow.getTime();String reStr = sdf.format(dt1);System.out.println(reStr);}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

注:在Calendar对象的add方法中,第二个参数为正数表示“加”,负数表示“减”。

二、java date 日期加减天数

import java.text.SimpleDateFormat;
import java.util.Date; public class DateTest { public static void main(String[] arg){ Date now = new Date();    addAndSubtractDaysByGetTime(now,-5); addAndSubtractDaysByGetTime(now,5); addAndSubtractDaysByCalendar(now,-5); addAndSubtractDaysByCalendar(now,5); } public static Date addAndSubtractDaysByGetTime(Date dateTime/*待处理的日期*/,int n/*加减天数*/){ //日期格式 SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");  SimpleDateFormat dd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");     System.out.println(df.format(new Date(dateTime.getTime() + n * 24 * 60 * 60 * 1000L))); //System.out.println(dd.format(new Date(dateTime.getTime() + n * 24 * 60 * 60 * 1000L))); //注意这里一定要转换成Long类型,要不n超过25时会出现范围溢出,从而得不到想要的日期值 return new Date(dateTime.getTime() + n * 24 * 60 * 60 * 1000L); } public static Date addAndSubtractDaysByCalendar(Date dateTime/*待处理的日期*/,int n/*加减天数*/){ //日期格式 SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");  SimpleDateFormat dd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  java.util.Calendar calstart = java.util.Calendar.getInstance(); calstart.setTime(dateTime); calstart.add(java.util.Calendar.DAY_OF_WEEK, n);  System.out.println(df.format(calstart.getTime())); //System.out.println(dd.format(calstart.getTime())); return calstart.getTime(); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

不推荐这个,代码不够简洁,看着不爽。

三、网上找的别人的,太长,没看,粘过来先

package com.data.utils;import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class DateFormat {/*** 日期减几年*/public static String dateMinusYear(String str) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");Date dt = sdf.parse(str);Calendar rightNow = Calendar.getInstance();rightNow.setTime(dt);rightNow.add(Calendar.YEAR, -1);// 日期减1年Date dt1 = rightNow.getTime();String reStr = sdf.format(dt1);return reStr;}/*** 日期加几年*/public static String dateAddYear(String str) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");Date dt = sdf.parse(str);Calendar rightNow = Calendar.getInstance();rightNow.setTime(dt);rightNow.add(Calendar.YEAR, 1);// 日期加1年Date dt1 = rightNow.getTime();String reStr = sdf.format(dt1);return reStr;}/*** 日期减几月*/public static String dateMinusMonth(String str) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");Date dt = sdf.parse(str);//将字符串生成DateCalendar rightNow = Calendar.getInstance();rightNow.setTime(dt);//使用给定的 Date 设置此 Calendar 的时间。 rightNow.add(Calendar.MONTH, -1);// 日期减1个月Date dt1 = rightNow.getTime();//返回一个表示此 Calendar 时间值的 Date 对象。String reStr = sdf.format(dt1);//将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。return reStr;}/*** 日期加几月*/public static String dateAddMonth(String str) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");Date dt = sdf.parse(str);Calendar rightNow = Calendar.getInstance();rightNow.setTime(dt);rightNow.add(Calendar.MONTH, 1);// 日期加3个月// rightNow.add(Calendar.DAY_OF_YEAR,10);//日期加10天Date dt1 = rightNow.getTime();String reStr = sdf.format(dt1);return reStr;}/*** 获取当前年月的第一个月的str* @param str*   201505* @return 201501* @throws Exception*/public static String dateOneMonth(String str) {str = str.substring(0, str.length() - 2);str = str + "01";return str;}/*** 算出所选月份距离一月份有几个月。* @param str 201509* @return 9*/public static int dateDistanceMonth(String str) {int i = Integer.parseInt(str);int j = Integer.parseInt(DateFormat.dateOneMonth(str));System.out.println(i - j);return i - j + 1;}/*** 获取两个时间的时间差,精确到毫秒* @param str* @return*/public static String TimeDifference(long start, long end) {long between = end - start;long day = between / (24 * 60 * 60 * 1000);long hour = (between / (60 * 60 * 1000) - day * 24);long min = ((between / (60 * 1000)) - day * 24 * 60 - hour * 60);long s = (between / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);long ms = (between - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000- min * 60 * 1000 - s * 1000);String timeDifference = day + "天" + hour + "小时" + min + "分" + s + "秒" + ms+ "毫秒";return timeDifference;}
}/*** 获取24小时、一周、一个月的起始时间* * @param timeInterval*   : DAY_TIME_INTERVAL WEEK_TIME_INTERVAL MONTH_TIME_INTERVAL* @return "yyyy-mm-dd hh:mm:ss"*/public static String getStartTime(int timeInterval) {Calendar cal = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");if (DAY_TIME_INTERVAL == timeInterval) {// 获取24小时的起始时间cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);String startTime = sdf.format(cal.getTime());return startTime;} else if (WEEK_TIME_INTERVAL == timeInterval) {int weekday = cal.get(Calendar.DAY_OF_WEEK) - 1;cal.add(Calendar.DATE, -weekday);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);String startTime = sdf.format(cal.getTime());return startTime;} else if (MONTH_TIME_INTERVAL == timeInterval) {int dayofmonthMin = cal.getActualMinimum(Calendar.DAY_OF_MONTH);// c.add(Calendar.DATE, -dayofmonth);cal.set(Calendar.DATE, dayofmonthMin);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);String startTime = sdf.format(cal.getTime());return startTime;}return null;}/*** 获取24小时、一周、一个月的结束时间* * @param timeInterval*   : DAY_TIME_INTERVAL WEEK_TIME_INTERVAL MONTH_TIME_INTERVAL* @return "yyyy-mm-dd hh:mm:ss"*/public static String getEndTime(int timeInterval) {Calendar cal = Calendar.getInstance();cal.setTimeZone(TimeZone.getTimeZone("GMT+8"));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");if (DAY_TIME_INTERVAL == timeInterval) {cal.set(Calendar.HOUR_OF_DAY, 23);cal.set(12, 59);cal.set(13, 59);long date = cal.getTimeInMillis();String endTime = sdf.format(new Date(date));return endTime;} else if (WEEK_TIME_INTERVAL == timeInterval) {int weekday = cal.get(Calendar.DAY_OF_WEEK) - 1;cal.add(Calendar.DATE, -weekday);cal.add(Calendar.DATE, 6);cal.set(Calendar.HOUR_OF_DAY, 23);cal.set(12, 59);cal.set(13, 59);long date = cal.getTimeInMillis();String endTime = sdf.format(new Date(date));return endTime;} else if (MONTH_TIME_INTERVAL == timeInterval) {int dayOfMonthMax = cal.getActualMaximum(Calendar.DAY_OF_MONTH);cal.set(Calendar.DATE, dayOfMonthMax);cal.set(Calendar.HOUR_OF_DAY, 23);cal.set(Calendar.MINUTE, 59);cal.set(Calendar.SECOND, 59);String endTime = sdf.format(cal.getTime());return endTime;}return null;}/*** 判断dateStr是否在start和end中间,start和end都可以为null yyyyMMddHHmmss或者yyyyMMdd格式* * @author you.xu* @date 2015年8月19日下午3:11:46* @param dateStr* @param start* @param end* @return*/public static boolean checkDateVal(String dateStr, String start, String end) {boolean isDateRight = false;Date date = null;Date startDate = null;Date endDate = null;SimpleDateFormat sdf = null;// 判断日期格式if (14 == dateStr.length()) {sdf = new SimpleDateFormat("yyyyMMddHHmmss");} else if (8 == dateStr.length()) {sdf = new SimpleDateFormat("yyyyMMdd");} elsereturn false;try {// 更改判断日期格式date = sdf.parse(dateStr);} catch (ParseException e) {log.error(e, e);}if ((start == null) && (end != null)) {try {endDate = sdf.parse(end);} catch (ParseException ex1) {log.error(ex1, ex1);}if ((date != null) && (endDate != null))// Check parameters for{if (date.compareTo(endDate) <= 0)isDateRight = true;}} else if ((start != null) && (end == null)) {try {startDate = sdf.parse(start);} catch (ParseException ex1) {log.error(ex1, ex1);}if ((date != null) && (startDate != null)) {if (date.compareTo(startDate) >= 0)isDateRight = true;}} else if ((start != null) && (end != null)) {try {startDate = sdf.parse(start);endDate = sdf.parse(end);} catch (ParseException ex2) {System.out.println(ex2.toString());}if ((startDate != null) && (date != null) && (endDate != null)) {if ((date.compareTo(startDate) >= 0)&& (date.compareTo(endDate) <= 0))isDateRight = true;}}return isDateRight;}/*** 判断dateStr是否在start和end中间,start和end都可以为null long形格式* * @author you.xu* @date 2015年8月19日下午3:12:35* @param dateStr* @param start* @param end* @return*/public static boolean checkDateV(String dateStr, String start, String end) {boolean isDateRight = false;long date = -1;long fromDate = -1;long toDate = -1;date = java.lang.Long.parseLong(dateStr);if ((start == null) && (end == null)) {isDateRight = true;} else if ((start == null) && (end != null)) {try {toDate = java.lang.Long.parseLong(end);} catch (NumberFormatException nfe) {log.error(nfe, nfe);}if (date <= toDate) {isDateRight = true;}} else if ((start != null) && (end == null)) {try {fromDate = java.lang.Long.parseLong(start);} catch (NumberFormatException nfe) {log.error(nfe, nfe);}if (date >= fromDate) {isDateRight = true;}} else if ((start != null) && (end != null)) {try {toDate = java.lang.Long.parseLong(end);fromDate = java.lang.Long.parseLong(start);} catch (NumberFormatException nfe) {log.error(nfe, nfe);}if ((date <= toDate) && (date >= fromDate)) {isDateRight = true;}}return isDateRight;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313

四、自己的方法的,简单说下需求,由于数据库里的存储类型是 “2017-07-04 12:00:00”,要按当前时间向前检索传进来的天数(noTradeDays),利用java.util的GregorianCalendar,结合SimpleDateFormat,完成当前时间逆推的需求

        /*** add by lee 2017/7/4 * 连续n天无交易*/if (!StringUtils.isEmpty(noTradeDays)) {**SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");GregorianCalendar gc=new GregorianCalendar(); gc.setTime(new Date());gc.add(5, -Integer.parseInt(noTradeDays));**String cardSql="select posid from card where usetime between "+"'"+sdf.format(gc.getTime())+"'"+" and "+"'"+sdf.format(new Date())+"'"+" group by posid";List<Card> cards = CardService.cardDAO.executeQuery(new Query(cardSql));if (cards.size()>0) {StringBuffer sb=new StringBuffer();for (Card posId : cards) {if (!StringUtils.isEmpty(posId.getPosid())) {sb.append("'").append(posId.getPosid()).append("'").append(",");}}if (sb.length()>0) {sql_add +=" and posid not in ("+sb.substring(0, sb.length()-1).toString()+")";}}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

恩,就是这样子了,总之就是灵活运用java.util里关于日期的相关类。

关于时间date的加减运算的处理相关推荐

  1. oracle时间怎么相加减,Oracle 如何对时间进行简单加减运算

    在我们用dbms_job包进行定时Job的时候,需要设置时间间隔,所以需要知道时间的基本加减方法. SQL> alter session set nls_date_format='yyyy-mm ...

  2. 时间格式进行加减运算,偷懒必备(60进制转10进制)

    package com.zhao.test.O1; import java.text.SimpleDateFormat; import java.util.Date; public class Tes ...

  3. 如何进行时间的加减运算

    ☆ Day 开头的函数 ● Unit DateUtils function DateOf(const Avalue: TDateTime): TDateTime; 描述 使用 DateOf 函数用来把 ...

  4. java时间差的百分之二十,Java对日期Date类进行加减运算、年份加减月份加减、时间差等等...

    实现代码一: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public c ...

  5. java当前月份减一个月_Java对日期Date类进行加减运算、年份加减月份加减、时间差等等...

    实现代码一: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public c ...

  6. php 天数加减_PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】...

    本文实例讲述了PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算方法.分享给大家供大家参考,具体如下: 其实就是strtotime这个内置函数 //PHP 日期 加减 周 date(&qu ...

  7. c语言中减号算一个字符吗,C语言中指针的加减运算

    char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf(&q ...

  8. 微信小程序时间转换成时间戳、获取当前时间戳、获取当前时间、时间戳加减

    时间转换成时间戳 var sTime = "2020-10-22 10:22:22"; var timestamp = Date.parse(new Date(sTime )); ...

  9. 微信小程序获取当前时间戳、获取当前时间、时间戳加减

    题外话: <Pi Network 免费挖矿国外热门项目 一个π币大约值3元到10元>相信过去BTC的人,信不信未来的PI,了解一下,唯一一个高度与之持平的项目 //获取当前时间戳 var ...

最新文章

  1. android各种权限及说明
  2. abb样本-感应电机与发电机手册_发电机工作原理图解
  3. oracle11g安装成功
  4. day12-mysql 事务与索引
  5. PyCharm Active Code Generator
  6. 百度知道回答html代码,html - JavaScript面试题:页面编码和被请求的资源编码 ,如果不一致,如何处理?百度上搜到一个答案,不知道是否正确?...
  7. 替换字符串_面试题精选:字符串替换
  8. 14-4 单任务版爬虫的架构
  9. 2007年测试员的工具选择排名
  10. 为什么关于反趋势交易的书以及文章很少?
  11. 谷歌浏览器使用charles抓包localhost
  12. python | 数组下表省略号的含义:array[...,:]==array[:,:,0]
  13. Kali--社会工程学工具-social engineering toolkit(SET)
  14. 20221115使用google文档翻译SRT格式的字幕
  15. Ktor2.0很多新特性,我们一年前就想到了,并已落实在项目中
  16. OSPF的区域间防环详解
  17. » 别了!我的大郅! 在这个雨夜仅此纪念我心目中那个追风少年!
  18. 三菱a系列motion软体_沧州三菱MR-J4-350B
  19. UG NX 12 导入文件
  20. 推荐个占用内存很小的经典音乐播放器CHKen Player

热门文章

  1. LeetCode 1143 最长公共子序列
  2. 退钱啦!从下月开始,事关每个人!
  3. 读书 文摘 笔记 2 人生的支柱
  4. 过滤特殊字符及表情符
  5. linux 调用rest接口,REST调用
  6. 状态模式/Android状态机/微信多人语音
  7. C++ 中ASCII码转16进制数
  8. Cadence教程(嘉立创封装导入到orcad)
  9. 到底是先就业还是先择业?
  10. 在cmd下批量实现图片后缀重命名