資源簡介
此demo為精確計算農歷二十四節氣,代碼較為簡單,可供參考

代碼片段和文件信息
package?com.sven.calendar.utils;
import?android.content.Context;
import?com.sven.calendar.R;
import?java.util.Calendar;
/**
?*?@author?lxslove
?*?@mail?moodlxs@163.com
?*?
?*?@see?http://www.doc88.com/p-211656359926.html?原理,http://www.fjptsz.com/xxjs/xjw/rj/115.htm?web版
?*/
public?class?SolarTerm?{
//?========角度變換===============
private?static?final?double?rad?=?180?*?3600?/?Math.PI;?//?每弧度的角秒數
private?static?final?double?RAD?=?180?/?Math.PI;?//?每弧度的角度數
//?================日歷計算===============
private?static?final?double?J2000?=?2451545;?//?2000年前儒略日數(2000-1-1?12:00:00格林威治平時)
//?=========黃赤交角及黃赤坐標變換===========
private?static?final?double?hcjjB[]?=?{?84381.448?-46.8150?-0.00059
0.001813?};//?黃赤交角系數表
private?static?final?double?preceB[]?=?{?0?50287.92262?111.24406
0.07699?-0.23479?-0.00178?0.00018?0.00001?};//?Date黃道上的歲差p
private?double?Y?=?2000;
private?double?M?=?1;
private?double?D?=?1;
private?double?h?=?12;
private?double?m?=?0;
private?double?s?=?0;
private?static?final?double[]?dts?=?{
//?世界時與原子時之差計算表
-4000?108371.7?-13036.80?392.000?0.0000?-500?17201.0
-627.82?16.170?-0.3413?-150?12200.6?-346.41?5.403?-0.1593
150?9113.8?-328.13?-1.647?0.0377?500?5707.5?-391.41?0.915
0.3145?900?2203.4?-283.45?13.034?-0.1778?1300?490.1?-57.35
2.085?-0.0072?1600?120.0?-9.81?-1.532?0.1403?1700?10.2
-0.91?0.510?-0.0370?1800?13.4?-0.72?0.202?-0.0193?1830
7.8?-1.81?0.416?-0.0247?1860?8.3?-0.13?-0.406?0.0292?1880
-5.4?0.32?-0.183?0.0173?1900?-2.3?2.06?0.169?-0.0135?1920
21.2?1.69?-0.304?0.0167?1940?24.2?1.22?-0.064?0.0031?1960
33.2?0.51?0.231?-0.0109?1980?51.0?1.29?-0.026?0.0032?2000
64.7?-1.66?5.224?-0.2905?2150?279.4?732.95?429.579?0.0158
6000?};
//?取整數部分
public?static?double?int2(double?v)?{
v?=?Math.floor(v);
if?(v?0)
return?v?+?1;
return?v;
}
//?對超過0-2PI的角度轉為0-2PI
public?static?double?rad2mrad(double?v)?{
v?=?v?%?(2?*?Math.PI);
if?(v?0)
return?v?+?2?*?Math.PI;
return?v;
}
//?計算世界時與原子時之差傳入年
public?double?deltatT(double?y)?{
int?i?=?0;
for?(i?=?0;?i?100;?i?+=?5)
if?(y? break;
double?t1?=?(y?-?dts[i])?/?(dts[i?+?5]?-?dts[i])?*?10;
double?t2?=?t1?*?t1;
double?t3?=?t2?*?t1;
return?dts[i?+?1]?+?dts[i?+?2]?*?t1?+?dts[i?+?3]?*?t2?+?dts[i?+?4]?*?t3;
}
//?傳入儒略日(J2000起算)計算UTC與原子時的差(單位:日)
public?double?deltatT2(double?jd)?{
return?this.deltatT(jd?/?365.2425?+?2000)?/?86400.0;
}
//?公歷轉儒略日UTC=1表示原日期是UTC
public?double?toJD(boolean?UTC)?{
double?y?=?this.Y;?//?取出年月
double?m?=?this.M;
double?n?=?0;
if?(m?<=?2)?{
m?+=?12;
y--;
}
if?(this.Y?*?372?+?this.M?*?31?+?this.D?>=?588829)?{
//?判斷是否為格里高利歷日1582*372+10*31+15
n?=?int2(y?/?100);
n?=?2?-?n?+?int2(n?/?4);//?加百年閏
}
n?+=?int2(365.2500001?*?(y?+?4716));?//?加上年引起的偏移日數
n?+=?int2(30.6?*?(m?+?1))?+?this.D;?//?加上月引起的偏移日數及日偏移數
n?+=?((t
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????50340??2014-03-24?09:06??精確計算農歷二十四節氣\SolarTerm.java
?????目錄???????????0??2018-12-11?17:53??精確計算農歷二十四節氣\
- 上一篇:Flash動畫制作作品設計說明書
- 下一篇:NotifyIcon
評論
共有 條評論