资源简介

说明: 1. LunarCalendar对象是以月历为基准的,例如:2014年8月的月历数据。 2. LunarCalendar的所有方法都是针对于农历而言,例如getMonth方法,代表获取的是农历月的数据,而不是公历。 3. LunarCalendar实例化,默认为今天,可以指定为某天,大多数方法都是依据实例化时指定的天而返回数据的。 4. LunarDate类,是某一天的农历数据对象,并且已经拆分,而不是以前那样都混杂在一块。 5. JulianDate类,是公历数据对象。 6. LunarConstant类,是基本常量的数据对象,里面含有大量基本数据。 本次的封装版,实质上还是较为简单,没有进一步深入和挖掘,但也基本够用了。各位读者可以根据自己的需要进行进一步整理,不过再整理和改造之前,建议还是先了解下相关的知识,否则估计你都无从下手,即便改了,在不了解逻辑的情况下,也容易出错。

资源截图

代码片段和文件信息

package com.util;

import com.util.LunarConstant.Common;

public class JulianDate {

/** 所在公历年 */
private int year = 2000;
/** 所在公历月 */
private int month = 1;
/** 所在公历日 */
private int day = 1;
/** 所在公历小时 */
private int hour = 12;
/** 所在公历分钟 */
private int minute = 0;
/** 所在公历秒钟 */
private double second = 0;

// private final String[] weeks = { “日“ “一“ “二“ “三“ “四“ “五“ “六“ “七“ };

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;
}

public int getDay() {
return day;
}

public void setDay(int day) {
this.day = day;
}

public int getHour() {
return hour;
}

public void setHour(int hour) {
this.hour = hour;
}

public int getMinute() {
return minute;
}

public void setMinute(int minute) {
this.minute = minute;
}

public double getSecond() {
return second;
}

public void setSecond(double second) {
this.second = second;
}

// 公历转儒略日
private double JD(int year int month double day) {
int n = 0 G = 0;
if (year * 372 + month * 31 + Math.floor(day) >= 588829)
G = 1; // 判断是否为格里高利历日1582*372+10*31+15
if (month <= 2) {
month += 12;
year--;
}
if (G != 0) {
n = (int) Math.floor(year / 100);
n = 2 - n + (int) Math.floor(n / 4); // 加百年闰
}
return Math.floor(365.25 * (year + 4716)) + Math.floor(30.6001 * (month + 1)) + day + n - 1524.5;
}

// 儒略日数转公历
private JulianDate DD(double jd) {
JulianDate julianDate = new JulianDate();
int year month day hour minute;
double second;
int D = (int) Math.floor(jd + 0.5) c;
double F = jd + 0.5 - D; // 取得日数的整数部份A及小数部分F

if (D >= 2299161) {
c = (int) Math.floor((D - 1867216.25) / 36524.25);
D += 1 + c - Math.floor(c / 4);
}
D += 1524;
year = (int) Math.floor((D - 122.1) / 365.25);// 年数
D -= Math.floor(365.25 * year);
month = (int) Math.floor(D / 30.601); // 月数
D -= Math.floor(30.601 * month);
day = D; // 日数
if (month > 13) {
month -= 13;
year -= 4715;
} else {
month -= 1;
year -= 4716;
}
// 日的小数转为时分秒
F *= 24;
hour = (int) Math.floor(F);
F -= hour;
F *= 60;
minute = (int) Math.floor(F);
F -= minute;
F *= 60;
second = F;

julianDate.setYear(year);
julianDate.setMonth(month);
julianDate.setDay(day);
julianDate.setHour(hour);
julianDate.setMinute(minute);
julianDate.setSecond(second);
return julianDate;
}

//日期转为串
private String DD2str(JulianDate julianDate) {
String Y = “     “ + julianDate.getYear() M = “0“ + julianDate.getMonth() D = “0“ + julianDate.getDay();
int h = julianDate.getHour() m = julianDate.getMinute() s = (int) Math.floor(julianDate.getSecond() + .5);
if (s >= 60) {
s -= 60;
m++;
}
if (m >= 60) {
m -= 60;
h++;
}
String hStr mSt

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5724  2014-08-08 13:27  JulianDate.java

     文件      13408  2014-08-14 16:21  LunarCalendar.java

     文件     279210  2014-08-12 16:01  LunarConstant.java

     文件       9186  2014-08-14 15:36  LunarDate.java

----------- ---------  ---------- -----  ----

               307528                    4


评论

共有 条评论