Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiaoxuan_i809
AndroidUtilCode
提交
9eee11e1
A
AndroidUtilCode
项目概览
xiaoxuan_i809
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AndroidUtilCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9eee11e1
编写于
4月 08, 2018
作者:
B
Blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
see 04/08 log
上级
b9c7daa9
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
117 addition
and
65 deletion
+117
-65
subutil/src/main/java/com/blankj/subutil/util/LunarUtils.java
...til/src/main/java/com/blankj/subutil/util/LunarUtils.java
+87
-65
subutil/src/test/java/com/blankj/subutil/util/LunarUtilsTest.java
...src/test/java/com/blankj/subutil/util/LunarUtilsTest.java
+30
-0
未找到文件。
subutil/src/main/java/com/blankj/subutil/util/LunarUtils.java
浏览文件 @
9eee11e1
...
...
@@ -17,7 +17,7 @@ public final class LunarUtils {
/*
* |----4位闰月|-------------13位1为30天,0为29天|
*/
private
static
int
[]
lunar_month_days
=
{
1887
,
0x1694
,
0x16aa
,
0x4ad5
,
0xab6
,
0xc4b7
,
0x4ae
,
0xa56
,
0xb52a
,
0x1d2a
,
private
static
final
int
[]
LUNAR_MONTH_DAYS
=
{
1887
,
0x1694
,
0x16aa
,
0x4ad5
,
0xab6
,
0xc4b7
,
0x4ae
,
0xa56
,
0xb52a
,
0x1d2a
,
0xd54
,
0x75aa
,
0x156a
,
0x1096d
,
0x95c
,
0x14ae
,
0xaa4d
,
0x1a4c
,
0x1b2a
,
0x8d55
,
0xad4
,
0x135a
,
0x495d
,
0x95c
,
0xd49b
,
0x149a
,
0x1a4a
,
0xbaa5
,
0x16a8
,
0x1ad4
,
0x52da
,
0x12b6
,
0xe937
,
0x92e
,
0x1496
,
0xb64b
,
0xd4a
,
0xda8
,
0x95b5
,
0x56c
,
0x12ae
,
0x492f
,
0x92e
,
0xcc96
,
0x1a94
,
0x1d4a
,
0xada9
,
0xb5a
,
0x56c
,
0x726e
,
0x125c
,
0xf92d
,
...
...
@@ -35,7 +35,7 @@ public final class LunarUtils {
0x14ae
,
0x8a4e
,
0x1a4c
,
0x11d26
,
0x1aa4
,
0x1b54
,
0xcd6a
,
0xada
,
0x95c
,
0x949d
,
0x149a
,
0x1a2a
,
0x5b25
,
0x1aa4
,
0xfb52
,
0x16b4
,
0xaba
,
0xa95b
,
0x936
,
0x1496
,
0x9a4b
,
0x154a
,
0x136a5
,
0xda4
,
0x15ac
};
private
static
int
[]
solar
_1_1
=
{
1887
,
0xec04c
,
0xec23f
,
0xec435
,
0xec649
,
0xec83e
,
0xeca51
,
0xecc46
,
0xece3a
,
private
static
final
int
[]
SOLAR
_1_1
=
{
1887
,
0xec04c
,
0xec23f
,
0xec435
,
0xec649
,
0xec83e
,
0xeca51
,
0xecc46
,
0xece3a
,
0xed04d
,
0xed242
,
0xed436
,
0xed64a
,
0xed83f
,
0xeda53
,
0xedc48
,
0xede3d
,
0xee050
,
0xee244
,
0xee439
,
0xee64d
,
0xee842
,
0xeea36
,
0xeec4a
,
0xeee3e
,
0xef052
,
0xef246
,
0xef43a
,
0xef64e
,
0xef843
,
0xefa37
,
0xefc4b
,
0xefe41
,
0xf0054
,
0xf0248
,
0xf043c
,
0xf0650
,
0xf0845
,
0xf0a38
,
0xf0c4d
,
0xf0e42
,
0xf1037
,
0xf124a
,
0xf143e
,
0xf1651
,
...
...
@@ -57,62 +57,32 @@ public final class LunarUtils {
0x106a3d
,
0x106c51
,
0x106e47
,
0x10703c
,
0x10724f
,
0x107444
,
0x107638
,
0x10784c
,
0x107a3f
,
0x107c53
,
0x107e48
};
private
static
int
G
etBitInt
(
final
int
data
,
final
int
length
,
final
int
shift
)
{
private
static
int
g
etBitInt
(
final
int
data
,
final
int
length
,
final
int
shift
)
{
return
(
data
&
(((
1
<<
length
)
-
1
)
<<
shift
))
>>
shift
;
}
/**
* 从1582年10月开始算
*
* @param y 年
* @param m 月
* @param d 日
* @return 阳历
*/
private
static
long
SolarToInt
(
int
y
,
int
m
,
final
int
d
)
{
m
=
(
m
+
9
)
%
12
;
y
=
y
-
m
/
10
;
return
365
*
y
+
y
/
4
-
y
/
100
+
y
/
400
+
(
m
*
306
+
5
)
/
10
+
(
d
-
1
);
}
/**
* 农历年转干支年
*
* @param lunarYear 农历年份
* @return String of Ganzhi: 甲子年 Tiangan:甲乙丙丁戊己庚辛壬癸
* Dizhi: 子丑寅卯辰巳无为申酉戌亥
* @return 干支年
*/
public
static
String
lunarYear
To
GanZhi
(
final
int
lunarYear
)
{
public
static
String
lunarYear
2
GanZhi
(
final
int
lunarYear
)
{
final
String
[]
tianGan
=
{
"甲"
,
"乙"
,
"丙"
,
"丁"
,
"戊"
,
"己"
,
"庚"
,
"辛"
,
"壬"
,
"癸"
};
final
String
[]
diZhi
=
{
"子"
,
"丑"
,
"寅"
,
"卯"
,
"辰"
,
"巳"
,
"午"
,
"未"
,
"申"
,
"酉"
,
"戌"
,
"亥"
};
return
tianGan
[(
lunarYear
-
4
)
%
10
]
+
diZhi
[(
lunarYear
-
4
)
%
12
]
+
"年"
;
}
private
static
Solar
SolarFromInt
(
final
long
g
)
{
long
y
=
(
10000
*
g
+
14780
)
/
3652425
;
long
ddd
=
g
-
(
365
*
y
+
y
/
4
-
y
/
100
+
y
/
400
);
if
(
ddd
<
0
)
{
y
--;
ddd
=
g
-
(
365
*
y
+
y
/
4
-
y
/
100
+
y
/
400
);
}
long
mi
=
(
100
*
ddd
+
52
)
/
3060
;
long
mm
=
(
mi
+
2
)
%
12
+
1
;
y
=
y
+
(
mi
+
2
)
/
12
;
long
dd
=
ddd
-
(
mi
*
306
+
5
)
/
10
+
1
;
Solar
solar
=
new
Solar
();
solar
.
solarYear
=
(
int
)
y
;
solar
.
solarMonth
=
(
int
)
mm
;
solar
.
solarDay
=
(
int
)
dd
;
return
solar
;
}
/**
* 农历转公历
*
* @param lunar 农历
* @return
阴
历
* @return
公
历
*/
public
static
Solar
LunarTo
Solar
(
final
Lunar
lunar
)
{
int
days
=
lunar_month_days
[
lunar
.
lunarYear
-
lunar_month_days
[
0
]];
int
leap
=
G
etBitInt
(
days
,
4
,
13
);
public
static
Solar
lunar2
Solar
(
final
Lunar
lunar
)
{
int
days
=
LUNAR_MONTH_DAYS
[
lunar
.
lunarYear
-
LUNAR_MONTH_DAYS
[
0
]];
int
leap
=
g
etBitInt
(
days
,
4
,
13
);
int
offset
=
0
;
int
loopend
=
leap
;
if
(!
lunar
.
isLeap
)
{
...
...
@@ -123,17 +93,17 @@ public final class LunarUtils {
}
}
for
(
int
i
=
0
;
i
<
loopend
;
i
++)
{
offset
+=
G
etBitInt
(
days
,
1
,
12
-
i
)
==
1
?
30
:
29
;
offset
+=
g
etBitInt
(
days
,
1
,
12
-
i
)
==
1
?
30
:
29
;
}
offset
+=
lunar
.
lunarDay
;
int
solar11
=
solar_1_1
[
lunar
.
lunarYear
-
solar
_1_1
[
0
]];
int
solar11
=
SOLAR_1_1
[
lunar
.
lunarYear
-
SOLAR
_1_1
[
0
]];
int
y
=
G
etBitInt
(
solar11
,
12
,
9
);
int
m
=
G
etBitInt
(
solar11
,
4
,
5
);
int
d
=
G
etBitInt
(
solar11
,
5
,
0
);
int
y
=
g
etBitInt
(
solar11
,
12
,
9
);
int
m
=
g
etBitInt
(
solar11
,
4
,
5
);
int
d
=
g
etBitInt
(
solar11
,
5
,
0
);
return
SolarFromInt
(
S
olarToInt
(
y
,
m
,
d
)
+
offset
-
1
);
return
solarFromInt
(
s
olarToInt
(
y
,
m
,
d
)
+
offset
-
1
);
}
/**
...
...
@@ -142,30 +112,30 @@ public final class LunarUtils {
* @param solar 公历
* @return 阴历
*/
public
static
Lunar
SolarTo
Lunar
(
final
Solar
solar
)
{
public
static
Lunar
solar2
Lunar
(
final
Solar
solar
)
{
Lunar
lunar
=
new
Lunar
();
int
index
=
solar
.
solarYear
-
solar
_1_1
[
0
];
int
index
=
solar
.
solarYear
-
SOLAR
_1_1
[
0
];
int
data
=
(
solar
.
solarYear
<<
9
)
|
(
solar
.
solarMonth
<<
5
)
|
(
solar
.
solarDay
);
int
solar11
=
0
;
if
(
solar
_1_1
[
index
]
>
data
)
{
if
(
SOLAR
_1_1
[
index
]
>
data
)
{
index
--;
}
solar11
=
solar
_1_1
[
index
];
int
y
=
G
etBitInt
(
solar11
,
12
,
9
);
int
m
=
G
etBitInt
(
solar11
,
4
,
5
);
int
d
=
G
etBitInt
(
solar11
,
5
,
0
);
long
offset
=
SolarToInt
(
solar
.
solarYear
,
solar
.
solarMonth
,
solar
.
solarDay
)
-
S
olarToInt
(
y
,
m
,
d
);
solar11
=
SOLAR
_1_1
[
index
];
int
y
=
g
etBitInt
(
solar11
,
12
,
9
);
int
m
=
g
etBitInt
(
solar11
,
4
,
5
);
int
d
=
g
etBitInt
(
solar11
,
5
,
0
);
long
offset
=
solarToInt
(
solar
.
solarYear
,
solar
.
solarMonth
,
solar
.
solarDay
)
-
s
olarToInt
(
y
,
m
,
d
);
int
days
=
lunar_month_days
[
index
];
int
leap
=
G
etBitInt
(
days
,
4
,
13
);
int
days
=
LUNAR_MONTH_DAYS
[
index
];
int
leap
=
g
etBitInt
(
days
,
4
,
13
);
int
lunarY
=
index
+
solar
_1_1
[
0
];
int
lunarY
=
index
+
SOLAR
_1_1
[
0
];
int
lunarM
=
1
;
int
lunarD
=
1
;
offset
+=
1
;
for
(
int
i
=
0
;
i
<
13
;
i
++)
{
int
dm
=
G
etBitInt
(
days
,
1
,
12
-
i
)
==
1
?
30
:
29
;
int
dm
=
g
etBitInt
(
days
,
1
,
12
-
i
)
==
1
?
30
:
29
;
if
(
offset
>
dm
)
{
lunarM
++;
offset
-=
dm
;
...
...
@@ -183,22 +153,74 @@ public final class LunarUtils {
lunar
.
isLeap
=
true
;
}
}
lunar
.
lunarDay
=
lunarD
;
return
lunar
;
}
private
static
Solar
solarFromInt
(
final
long
g
)
{
long
y
=
(
10000
*
g
+
14780
)
/
3652425
;
long
ddd
=
g
-
(
365
*
y
+
y
/
4
-
y
/
100
+
y
/
400
);
if
(
ddd
<
0
)
{
y
--;
ddd
=
g
-
(
365
*
y
+
y
/
4
-
y
/
100
+
y
/
400
);
}
long
mi
=
(
100
*
ddd
+
52
)
/
3060
;
long
mm
=
(
mi
+
2
)
%
12
+
1
;
y
=
y
+
(
mi
+
2
)
/
12
;
long
dd
=
ddd
-
(
mi
*
306
+
5
)
/
10
+
1
;
Solar
solar
=
new
Solar
();
solar
.
solarYear
=
(
int
)
y
;
solar
.
solarMonth
=
(
int
)
mm
;
solar
.
solarDay
=
(
int
)
dd
;
return
solar
;
}
private
static
long
solarToInt
(
int
y
,
int
m
,
final
int
d
)
{
m
=
(
m
+
9
)
%
12
;
y
=
y
-
m
/
10
;
return
365
*
y
+
y
/
4
-
y
/
100
+
y
/
400
+
(
m
*
306
+
5
)
/
10
+
(
d
-
1
);
}
public
static
class
Lunar
{
public
boolean
isLeap
;
public
int
lunarDay
;
public
int
lunarMonth
;
public
int
lunarYear
;
public
int
lunarMonth
;
public
int
lunarDay
;
public
boolean
isLeap
;
Lunar
()
{
}
public
Lunar
(
int
lunarYear
,
int
lunarMonth
,
int
lunarDay
,
boolean
isLeap
)
{
this
.
lunarYear
=
lunarYear
;
this
.
lunarMonth
=
lunarMonth
;
this
.
lunarDay
=
lunarDay
;
this
.
isLeap
=
isLeap
;
}
@Override
public
String
toString
()
{
return
""
+
lunarYear
+
", "
+
lunarMonth
+
", "
+
lunarDay
+
", "
+
isLeap
;
}
}
public
static
class
Solar
{
public
int
solarDay
;
public
int
solarMonth
;
public
int
solarYear
;
public
int
solarMonth
;
public
int
solarDay
;
Solar
()
{
}
public
Solar
(
int
solarYear
,
int
solarMonth
,
int
solarDay
)
{
this
.
solarYear
=
solarYear
;
this
.
solarMonth
=
solarMonth
;
this
.
solarDay
=
solarDay
;
}
@Override
public
String
toString
()
{
return
""
+
solarYear
+
", "
+
solarMonth
+
", "
+
solarDay
;
}
}
}
subutil/src/test/java/com/blankj/subutil/util/LunarUtilsTest.java
0 → 100644
浏览文件 @
9eee11e1
package
com.blankj.subutil.util
;
import
org.junit.Test
;
/**
* <pre>
* author: Blankj
* blog : http://blankj.com
* time : 2018/04/08
* desc :
* </pre>
*/
public
class
LunarUtilsTest
{
@Test
public
void
lunarYear2GanZhi
()
throws
Exception
{
System
.
out
.
println
(
LunarUtils
.
lunarYear2GanZhi
(
2018
));
}
@Test
public
void
lunar2Solar
()
throws
Exception
{
System
.
out
.
println
(
LunarUtils
.
lunar2Solar
(
new
LunarUtils
.
Lunar
(
2018
,
2
,
23
,
false
)));
}
@Test
public
void
solar2Lunar
()
throws
Exception
{
System
.
out
.
println
(
LunarUtils
.
solar2Lunar
(
new
LunarUtils
.
Solar
(
2018
,
4
,
8
)));
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录