开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 940|回复: 5
收起左侧

[android教程] Java编程中关于日期的常用算法

[复制链接]

结帖率:76% (32/42)
发表于 2017-2-26 09:26:47 | 显示全部楼层 |阅读模式   山东省*

关于日期的常用算法有很多,但如果掌握了基本的算法,难一点的可以分解为简单的,各个击破。

1)判断一年是否为闰年:

  1. //判断一年是否为闰年
  2. static boolean IsLeapYear(int year){
  3.     return (year % 400 == 0 || year % 4 == 0 && year % 100 != 0);
  4. }
复制代码

2)获得某一年的总天数:(闰年366天,非闰年355)

  1. //获得某一年的总天数
  2. static int GetAllDays(int year){
  3.     return (IsLeapYear(year)? 366: 365);
  4. }
复制代码

3)获得某年、某月的最大天数

  1. //获得某年、某月的最大天数
  2. static int GetMaxDay(int year,int month){
  3.     switch(month)
  4.     {
  5.     case 1:
  6.     case 3:
  7.     case 5:
  8.     case 7:
  9.     case 8:
  10.     case 10:
  11.     case 12:
  12.         return 31;        
  13.     case 4:
  14.     case 6:
  15.     case 9:
  16.     case 11:
  17.         return 30;   
  18.     case 2:
  19.         return (IsLeapYear(year)? 29: 28);   
  20.     default:
  21.         return -1;
  22.     }
  23. }
复制代码

4)获得某年、某月、某日是这一年的第几天

  1. //获得某年、某月、某日是这一年的第几天
  2. static int GetDays(int year,int month,int day){
  3.     int sum = 0;
  4.    
  5.     for(int i = 1; i < month ; i++){
  6.         sum += GetMaxDay(year,i);
  7.     }
  8.    
  9.     return sum+day;
  10. }
复制代码

5)获得某年某月的下一天

  1. //获得某年某月某日的下一天
  2. static void GetNextDay(int year,int month,int day){
  3.     if(day != GetMaxDay(year,month)){
  4.         day++;
  5.     }else
  6.     {
  7.         if(month != 12)
  8.         {month++; day = 1;}
  9.         else
  10.         {year++; month = day =1;}
  11.     }
  12. }
复制代码

6)获得某年某日的前一天

  1. //获得某年某月某日的前一天
  2. static void GetPreDay(int year,int month,int day){
  3.     if(day != 1){
  4.         day--;
  5.     }else{
  6.         if(month != 1){
  7.             month--;
  8.             GetMaxDay(year,month);
  9.         }
  10.         else{
  11.             year--;month = 12;day = 31;
  12.         }
  13.     }
  14. }
复制代码

7)获得某年某月某日n天后的日期

  1. //获得某年某月某日n天之后的日期
  2. static void GetXDay(int year,int month,int day,int X){
  3.     for(int i = 1; i<= X; i++){
  4.         if(day != GetMaxDay(year,month)){
  5.             day++;
  6.         }else{
  7.             if(month != 12){
  8.                 month++;day = 1;
  9.             }else{
  10.                 year++;
  11.                 month = day = 1;
  12.             }
  13.         }
  14.     }
  15.     System.out.println(X+" 天后是:"+year+"-"+month+"-"+day);
  16.    
  17.    
  18. }
复制代码
8)比较日期大小
  1. //比较日期大小
  2. static int CompareDay(int year1,int month1,int day1, int year2,int month2,int day2){
  3.     return year1 != year2? (year1-year2):(month1 != month2 ? (month1-month2): day1-day2);
  4. }
复制代码
9)求日期之差
  1. //求日期之差
  2. static int GetDateDiff1(int year1,int month1,int day1,int year2,int month2,int day2){
  3.     int sum = GetAllDays(year1) - GetDays(year1,month1,day1);
  4.     for(int i = year1+1; i < year2; i++ ){
  5.         sum += GetAllDays(i);
  6.     }
  7.     sum += GetDays(year2,month2,day2);
  8.     return sum;
  9. }
  10. static int GetDateDiff(int year1,int month1,int day1,int year2,int month2,int day2){
  11.     if(CompareDay(year1,month1,day1,year2,month2,day2) > 0){
  12.         return -GetDateDiff1(year2,month2,day2,year1,month1,day1);
  13.     }else if(CompareDay(year1,month1,day1,year2,month2,day2) < 0){
  14.         return GetDateDiff1(year1,month1,day1,year2,month2,day2);
  15.     }
  16.     return 0;
  17. }
复制代码


点评

版主带头刷帖了,不得了   山东省*  发表于 2017-2-26 09:33
发表于 2017-2-26 10:21:52 | 显示全部楼层   四川省雅安市
不错很好的 阿达大打到啊 阿斯
回复 支持 反对

使用道具 举报

结帖率:76% (32/42)
 楼主| 发表于 2017-2-26 10:04:38 | 显示全部楼层   山东省*
yueying 发表于 2017-2-26 09:35
我就这个时间段有时间上论坛,这种应该不算是违规吧,这些都是我evernote导出来的文章。

这是我的云笔记,目前Java版区资源困乏,如果我直接上项目直播帖,能跟上的不多吧,有了基础才能往后扩展,这里面还有很多的分支,包括前端包括后端,数据库,解决方案,框架开发,如果我短时间整理出来确实有点影响论坛秩序,我再做调整吧,谢谢建议。
回复 支持 反对

使用道具 举报

结帖率:76% (32/42)
 楼主| 发表于 2017-2-26 09:35:24 | 显示全部楼层   山东省*
我就这个时间段有时间上论坛,这种应该不算是违规吧,这些都是我evernote导出来的文章。

点评

版主应该做好带头作用,希望不要原版照搬网上原有的源码,应该有更多原创的东西!同一时间刷那么多搬来的贴,跟灌水没什么区别   福建省福州市  发表于 2017-2-26 09:58
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表