- 浏览: 34400 次
- 性别:
- 来自: 北京
最新评论
-
cjf068:
LuckYes 写道楼主如果用最小堆的话,最好用调整堆的方式来 ...
求最小的k个数问题 -
LuckYes:
楼主如果用最小堆的话,最好用调整堆的方式来构建堆,这样效率更高 ...
求最小的k个数问题 -
cjf068:
这个算法的基本思路, ...
大数乘法 -
liujunsong:
这个算法的基本思路,是小学3年级的 算法,就是简单的把乘法运算 ...
大数乘法 -
shuidexiongdi:
去年我也写了一个http://shuidexiongdi.it ...
大数乘法
简单日期计算类:
日期大小比较
日期之间天数计算
日期大小比较
日期之间天数计算
package org.jf.alg; /** * * @author junfeng.chen * */ public class Date { private int year; private int month; private int day; private static final int days_array[]= {31,28,31,30,31,30,31,31,30,31,30,31}; private static final int days_leap_array[]= {31,29,31,30,31,30,31,31,30,31,30,31}; private static final String MONTH_NAME[] = {"January","Febuary", "March", "April", "May", "June", "July", "August", "September", "October","November","December"}; private static final String WEEK_NAME[] = {"Monday","Tuesday", "Wednesday","Thursday", "Friday","Saturday","Sunday"}; public Date(int year,int month,int day) { this.year = year; boolean leap = Date.isLeapYear(this.year); this.month = month; if(this.month%12==0) this.month = 12; else this.month = this.month%12; if(leap) { this.day = day%days_leap_array[this.month-1]==0?days_leap_array[this.month-1]:day%days_leap_array[this.month-1];//day<=days_leap_array[this.month-1]?day:days_leap_array[this.month-1]; }else { this.day = day%days_array[this.month-1]==0?days_array[this.month-1]:day%days_array[this.month-1]; } } public Date() { this.year = 1970; this.month = 1; this.day =1; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; boolean leap = Date.isLeapYear(this.year); if(this.month%12==0) this.month = 12; else this.month = this.month%12; //check day if(leap) { this.day = day%days_leap_array[this.month-1]==0?days_leap_array[this.month-1]:day%days_leap_array[this.month-1];//day<=days_leap_array[this.month-1]?day:days_leap_array[this.month-1]; }else { this.day = day%days_array[this.month-1]==0?days_array[this.month-1]:day%days_array[this.month-1]; } } public int getDay() { return day; } /** * date filed set seq --> year month day * you should granted that year filed and month filed have set * @param day */ public void setDay(int day) { this.day = day; boolean isleap = isLeapYear(year); if(isleap) { this.day = day%days_leap_array[this.month-1]==0?days_leap_array[this.month-1]:day%days_leap_array[this.month-1];//day<=days_leap_array[this.month-1]?day:days_leap_array[this.month-1]; }else { this.day = day%days_array[this.month-1]==0?days_array[this.month-1]:day%days_array[this.month-1]; } } public Date addDay(int days) { if(days > 0) { //上补齐为本月末一天 int thismonthday = this.monthDays(this.month,isLeapYear(this)); int d = thismonthday - this.day; if(days>=d) { this.day = thismonthday; days = days - d; } else { this.day+=days; days = 0; } while(days > 0) { int nextmonth = this.month+1; int nextyear = this.year; if(nextmonth>12) { nextmonth = 1; nextyear += 1; } boolean ran = isLeapYear(nextyear); int nextmonthday = this.monthDays(nextmonth,ran); if(days>=nextmonthday) { this.month = nextmonth; this.year = nextyear; days -= nextmonthday; this.day = nextmonthday; }else { this.month = nextmonth; this.day = days; days = 0; } } }else { days*=-1; //下补齐为上月最后一天(如果可能) if(this.day<=days) { days -= this.day; int pre_year = this.year; int pre_month =this.month-1; if(pre_month == 0) { pre_month = 12; pre_year -- ; } int pre_month_day = monthDays(pre_month,isLeapYear(pre_year)); this.year = pre_year; this.month = pre_month; this.day = pre_month_day; }else { this.day -= days; days = 0; } //按月递减 while(days>0) { int pre_month = this.month - 1; int pre_year = year; if(pre_month==0) { pre_month = 12; pre_year = year -1; } int pre_month_day = this.monthDays(pre_month, isLeapYear(pre_year)); if(days>=this.day) { days -= this.day; this.year = pre_year; this.month = pre_month; this.day = pre_month_day; }else { this.day -= days; days = 0; } } } return this; } /** * * @param months * @return */ public Date addMonth(int months) { int addYear = months/12; int addMonth = months%12; if(months>0) { this.year += addYear; this.month += addMonth; if(this.month>12) { this.year ++; this.month = this.month - 12; } }else { this.year +=addYear; if(this.month+addMonth<=0) { this.year --; this.month = 12 + this.month+addMonth; }else { this.month += addMonth; } } boolean isleap = isLeapYear(year); if(isleap) { if(day>Date.days_leap_array[month-1]) day = Date.days_leap_array[month-1]; } else { if(day>Date.days_array[month-1]) day = Date.days_array[month-1]; } return this; } public Date addYear(int year) { this.year +=year; boolean leap = Date.isLeapYear(this.year); if(leap) { if(this.day > Date.days_leap_array[this.month-1]) this.day = Date.days_leap_array[this.month-1]; }else { if(this.day > Date.days_array[this.month-1]) this.day = Date.days_array[this.month-1]; } return this; } @Deprecated public static int daysBetween(Date date1,Date date2) { return date1.days() - date2.days(); } public String weekDay() { int week_num = (day + 2*month + 3*(month+1)/5 + year + year/4 - year/100 + year/400) % 7; return Date.WEEK_NAME[week_num]; } public int dateDiff(Date date) { int nd , nm , ny; //new_day, new_month, new_year int od , om , oy ; //old_day, oldmonth, old_year nm = (date.month + 9) % 12; ny = date.year - nm/10; nd = 365*ny + ny/4 - ny/100 + ny/400 + (nm*306 + 5)/10 + (date.day - 1); om = (month + 9) % 12; oy = year - om/10; od = 365*oy + oy/4 - oy/100 + oy/400 + (om*306 + 5)/10 + (day - 1); return od - nd; } public int cmp(Date date) { if (this.year > date.year) return 1; else if (this.year == date.year) { if (this.month > date.month) return 1; else if (this.month == date.month) { if (this.day > date.day) return 1; else if (this.day == date.day) return 0; // return -1; } // return -1; } return -1; } public static boolean isLeapYear(int year) { return (year%4==0&&year%100!=0) || year%400 == 0; } public static boolean isLeapYear(Date date) { return (date.year%4==0&&date.year%100!=0) || date.year % 400 == 0 ; } private int monthDays(int month,boolean run) { if(run) return days_leap_array[month-1]; return days_array[month-1]; } public String toString() { return this.year+"-"+this.month+"-"+this.day; } int days() { int year = this.year; int month = this.month; int day = this.day; int days = 0; days += day; month --; if(month==0) { month = 12; year --; } int monthday = this.monthDays(month, isLeapYear(year)); while(year>0) { days+=monthday; month --; if(month==0) { month = 12; year --; } monthday = this.monthDays(month, isLeapYear(year)); } return days; } }
发表评论
-
中文数字到阿拉伯数字转换
2012-04-24 10:18 1874昨天博客上看到一童鞋 ... -
布隆过滤器
2012-04-23 15:39 955package org.jf.alg; import ... -
基本的排序算法
2012-04-21 21:07 733插入排序 选择排序 快速排序 。。。。 后续补充 pack ... -
判断数组中是否存在两个元素之和等于给定数值
2012-04-06 22:58 2005已知int数组a按升序排列,要求用线性时间复杂的算法,判断是否 ... -
求最大子数组之和
2012-04-06 22:51 1302求最大子数组之和的线性解法:本算法受编程珠玑中提示而得 /** ... -
LRUCache
2012-03-15 14:35 1655MyLRUCache 缓存类 package org.jf ... -
求变位词组合
2012-03-13 22:53 851public class CharComp { ... -
计算24点
2012-03-13 21:49 1259计算n个数的全排列 package org.jf.alg. ... -
表达式计算
2012-03-10 23:02 906中缀表达式转后缀 后缀表达式计算 支持整型 分数计算,只支持 ... -
Many2One缓冲
2012-03-06 12:35 931多线程并发操作中,为了尽量减少同步锁的开销,一般都会尽可能减少 ... -
红黑树
2012-03-03 21:47 1229红黑树 规则 * 1.每个 ... -
行文件分组统计
2012-03-02 22:57 831有些情况下,对于一个结构化的以行为记录的文本文件,需要按列分组 ... -
简单LRU缓存实现
2012-02-09 21:12 1070链表保存键值,由于没有权值策略,简单的将当前访问过的节点放到链 ... -
大根堆
2012-02-08 22:23 1419大根堆,可用于优先级队列 package org.jf.a ... -
固定容量二叉堆
2012-02-08 17:26 996固定容量的二叉堆实现,可用于快速求top k 问题。如要求一个 ... -
大数乘法
2012-02-07 00:16 2885论坛看到的一个面试题,实现任意大整数字符串相乘,返回结果字符串 ...
相关推荐
在IT领域,根据经纬度和日期计算日出日落时间是一项常见的地理信息处理任务,它涉及到天文学、地球物理学和编程技术。这个程序的核心是利用天文学公式来预测太阳在地平线上的位置,从而确定一天中的日出和日落时刻。...
在Android开发中,为了提供与iOS类似的用户体验,开发者...这个项目展示了如何结合使用自定义View、日期计算和星座判断来实现这一功能。理解和实现这样的功能有助于提升Android开发者在UI设计和用户交互方面的技能。
标题中的"S7-200SMART_日期计算(天数)库文件及使用说明"指的是一个专门针对西门子S7-200SMART系列PLC的编程资源,该资源包含了一个用于处理日期和时间计算的库函数,特别是计算两个日期之间相差的天数。...
### SQL Server中的日期计算方法详解 在SQL Server中进行日期计算是数据库操作中常见的需求之一。本文将深入探讨SQL Server中处理日期的各种方法,并通过具体的示例来展示这些方法的实际应用。 #### 1. DATEADD 和...
在C语言中,实现根据日期计算星期几的功能是常见且实用的编程需求。本文将详细解析一段C语言代码,该代码能够根据输入的年、月、日计算出对应的星期几。 ### 核心知识点 #### C语言中的日期处理 C语言标准库并未...
个人在进行C语言复习期间编写的一个进行日期计算的程序(算法优化),主要功能有:选择菜单,两个日期求间隔,按天数往后计算日期,按天数往前计算日期,功能循环。主要用了函数,指针,结构体等知识
假设我们已经有了一个 `TDate` 类型的变量 `BirthDate` 存储了用户的出生日期,我们可以使用 `Now` 函数获取当前日期,并用这两个日期进行计算。 计算年龄的基本步骤如下: 1. 获取当前日期:`CurrentDate := Now;...
### Java根据日期计算年龄与星期知识点详解 #### 一、概述 在Java中处理日期时,经常需要根据特定的日期来计算出年龄或者确定该日期是星期几。这对于开发涉及日期处理的应用程序非常实用。本文将详细介绍如何使用...
本教程将详细讲解如何在Labview中进行日期时间间隔的计算,包括计算天数和小时数,以及如何在给定日期基础上增加指定的天数。 首先,我们需要理解Labview中的日期和时间数据类型。在Labview中,日期和时间通常以...
在编程领域,日期计算是一个常见的任务,特别是在处理与时间有关的应用中。本项目"日期计算程序(java)"提供了一个简单的Java小程序,旨在帮助用户计算两日期之间的天数差异,例如计算自己的年龄或者任何两个有意义...
根据给定的文件信息,我们可以总结出以下关于“C语言前一天日期计算”的详细知识点: ### 一、程序目的 该程序的主要目的是计算任意指定日期的前一天。用户输入一个具体的年月日,程序会验证这些输入是否合法...
FYDATE.EXE - 日期计算工具 [2008 Forever Young] <br>使用帮助: ======================================================= <br>/? or /H - 显示帮助信息。 <br>/T:[+ | -]x - 计算日期 + 增加 - ...
本教程将深入探讨如何根据日期计算星期几以及如何根据月份计算天数。这些功能在日历应用、报表生成、数据分析等场景中非常实用。 首先,我们需要了解C#中的`DateTime`结构。`DateTime`是.NET框架提供的一个类型,...
### JS日期计算:掌握日期操作的艺术 在JavaScript中,日期计算是前端开发中常见的需求之一,无论是处理用户界面中的日期选择、数据统计还是时区转换,掌握日期对象及其方法都是必不可少的技能。本文将深入探讨如何...
### SAP 订单交货日期计算详解 #### 一、引言 在现代供应链管理中,准确预测和控制交货日期对于提升客户满意度至关重要。本文旨在深入探讨SAP系统中订单交货日期的计算逻辑及其背后的配置方法。我们将通过理论与...
在建筑工程领域,施工日期计算是一项至关重要的任务,它涉及到项目的进度管理、资源调度以及合同履行等多个方面。"日历计算 施工日期计算" 主要关注如何准确地从施工开始日期推算出竣工日期,这涉及到一系列的时间...
日期计算、倒计时以及天数计算是编程领域中常见的功能需求,特别是在日历应用、项目管理、事件提醒等场景中。以下将详细介绍这些概念及其在实际应用中的实现方法。 日期计算涉及到对日期的加减操作,比如计算两个...
在探讨SQL Server中进行日期计算的方法之前,我们必须了解SQL Server中处理日期和时间的基本函数:DATEDIFF和DATEADD。这两个函数在实际应用中非常常用,可以帮助我们得到两个日期间的时间间隔以及通过已知时间间隔...
java指定日期计算一年内第几天和给出一年内第几天算出指定日期 【指定日期换算成第几天】 2019年10月31日是一年内的第:304天 【一年的第几天换算对应日期】 2019年的第304天 对应的日期是2019-10-31