搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
空白诗007
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
设计模式——七大设计原则
2
python格式化输出print、format_python print format
3
物联网毕业设计选题推荐100例_物联网相关的毕业设计题目
4
基于Java+Neo4j的知识图谱+全文检索的知识库管理系统(附文档+完整源码)_java neoj4 知识图谱 开源
5
机器学习——人工神经网络之参数设置(BP算法)_bp神经网络的参数配置epochs
6
Java暂停/挂起线程(suspend())和恢复线程(resume())_java suspend
7
【SQL】MySQL中的字符串处理函数:concat 函数拼接字符串,COALESCE函数处理NULL字符串_sql concat
8
HTTP和HTTPS协议,看一篇就够了
9
* web H5 网页 浏览器 蓝牙 Bluetooth_navigator.bluetooth.requestdevice
10
掌握大语言模型技术: 推理优化_语言大模型推理
当前位置:
article
> 正文
JAVA农历转公历,公历转农历算法_java公历转农历算法
作者:空白诗007 | 2024-08-22 16:51:48
赞
踩
java公历转农历算法
public class Lunar
{
private int year;
private int month;
private int day;
private boolean leap;
final static String chineseNumber[] =
{ "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };
final static String Big_Or_Small[] =
{ "大", "小", "大", "小", "大", "小", "大", "大", "小", "大", "小", "大" };
private String[] LunarHolDayName =
{ "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至",
"小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪",
"冬至" };
static SimpleDateFormat chineseDateFormat = new SimpleDateFormat(
" yyyy年MM月dd日 ");
final static long[] lunarInfo = new long[]
{
0x04bd8
,
0x04ae0
,
0x0a570
,
0x054d5
,
0x0d260
,
0x0d950
,
0x16554
,
0x056a0
,
0x09ad0
,
0x055d2
,
0x04ae0
,
0x0a5b6
,
0x0a4d0
,
0x0d250
,
0x1d255
,
0x0b540
,
0x0d6a0
,
0x0ada2
,
0x095b0
,
0x14977
,
0x04970
,
0x0a4b0
,
0x0b4b5
,
0x06a50
,
0x06d40
,
0x1ab54
,
0x02b60
,
0x09570
,
0x052f2
,
0x04970
,
0x06566
,
0x0d4a0
,
0x0ea50
,
0x06e95
,
0x05ad0
,
0x02b60
,
0x186e3
,
0x092e0
,
0x1c8d7
,
0x0c950
,
0x0d4a0
,
0x1d8a6
,
0x0b550
,
0x056a0
,
0x1a5b4
,
0x025d0
,
0x092d0
,
0x0d2b2
,
0x0a950
,
0x0b557
,
0x06ca0
,
0x0b550
,
0x15355
,
0x04da0
,
0x0a5d0
,
0x14573
,
0x052d0
,
0x0a9a8
,
0x0e950
,
0x06aa0
,
0x0aea6
,
0x0ab50
,
0x04b60
,
0x0aae4
,
0x0a570
,
0x05260
,
0x0f263
,
0x0d950
,
0x05b57
,
0x056a0
,
0x096d0
,
0x04dd5
,
0x04ad0
,
0x0a4d0
,
0x0d4d4
,
0x0d250
,
0x0d558
,
0x0b540
,
0x0b5a0
,
0x195a6
,
0x095b0
,
0x049b0
,
0x0a974
,
0x0a4b0
,
0x0b27a
,
0x06a50
,
0x06d40
,
0x0af46
,
0x0ab60
,
0x09570
,
0x04af5
,
0x04970
,
0x064b0
,
0x074a3
,
0x0ea50
,
0x06b58
,
0x055c0
,
0x0ab60
,
0x096d5
,
0x092e0
,
0x0c960
,
0x0d954
,
0x0d4a0
,
0x0da50
,
0x07552
,
0x056a0
,
0x0abb7
,
0x025d0
,
0x092d0
,
0x0cab5
,
0x0a950
,
0x0b4a0
,
0x0baa4
,
0x0ad50
,
0x055d9
,
0x04ba0
,
0x0a5b0
,
0x15176
,
0x052b0
,
0x0a930
,
0x07954
,
0x06aa0
,
0x0ad50
,
0x05b52
,
0x04b60
,
0x0a6e6
,
0x0a4e0
,
0x0d260
,
0x0ea65
,
0x0d530
,
0x05aa0
,
0x076a3
,
0x096d0
,
0x04bd7
,
0x04ad0
,
0x0a4d0
,
0x1d0b6
,
0x0d250
,
0x0d520
,
0x0dd45
,
0x0b5a0
,
0x056d0
,
0x055b2
,
0x049b0
,
0x0a577
,
0x0a4b0
,
0x0aa50
,
0x1b255
,
0x06d20
,
0x0ada0
};
// ====== 传回农历 y年的总天数
final private static int yearDays(int y)
{
int i, sum =
348
;
for (i =
0x8000
; i >
0x8
; i >>=
1
)
{
if ((lunarInfo[y -
1900
] & i) !=
0
)
sum +=
1
;
}
return (sum + leapDays(y));
}
// ====== 传回农历 y年闰月的天数
final private static int leapDays(int y)
{
if (leapMonth(y) !=
0
)
{
if ((lunarInfo[y -
1900
] &
0x10000
) !=
0
)
return
30
;
else
return
29
;
}
else
return
0
;
}
// ====== 传回农历 y年闰哪个月 1-12 , 没闰传回 0
final private static int leapMonth(int y)
{
return (int) (lunarInfo[y -
1900
] &
0xf
);
}
// ====== 传回农历 y年m月的总天数
final private static int monthDays(int y, int m)
{
if ((lunarInfo[y -
1900
] & (
0x10000
>> m)) ==
0
)
return
29
;
else
return
30
;
}
// ====== 传回农历 y年的生肖
final public String animalsYear()
{
final String[] Animals = new String[]
{ "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };
return Animals[(year -
4
) %
12
];
}
// ====== 传入 月日的offset 传回干支, 0=甲子
final private static String cyclicalm(int num)
{
final String[] Gan = new String[]
{ "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };
final String[] Zhi = new String[]
{ "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };
return (Gan[num %
10
] + Zhi[num %
12
]);
}
// ====== 传入 offset 传回干支, 0=甲子
final public String cyclical()
{
int num = year -
1900
+
36
;
return (cyclicalm(num));
}
/** */
/**
* 传出y年m月d日对应的农历. yearCyl3:农历年与1864的相差数 ? monCyl4:从1900年1月31日以来,闰月数
* dayCyl5:与1900年1月31日相差的天数,再加40 ?
*
* @param cal
* @return
*/
public Lunar(Calendar cal)
{
// cal.add(cal.get(Calendar.DAY_OF_MONTH),1);
@SuppressWarnings
(" unused ")
int yearCyl, monCyl, dayCyl;
int leapMonth =
0
;
Date baseDate = null;
try
{
baseDate = chineseDateFormat.parse(" 1900年1月31日 ");
}
catch (ParseException e)
{
e.printStackTrace(); // To change body of catch statement use
// Options | File Templates.
}
// 求出和1900年1月31日相差的天数
int offset = (int) ((cal.getTime().getTime() - baseDate.getTime()) / 86400000L);
dayCyl = offset +
40
;
monCyl =
14
;
// 用offset减去每农历年的天数
// 计算当天是农历第几天
// i最终结果是农历的年份
// offset是当年的第几天
int iYear, daysOfYear =
0
;
for (iYear =
1900
; iYear <
2050
&& offset >
0
; iYear++)
{
daysOfYear = yearDays(iYear);
offset -= daysOfYear;
monCyl +=
12
;
}
if (offset <
0
)
{
offset += daysOfYear;
iYear--;
monCyl -=
12
;
}
// 农历年份
year = iYear;
yearCyl = iYear -
1864
;
leapMonth = leapMonth(iYear); // 闰哪个月,1-12
leap = false;
// 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天
int iMonth, daysOfMonth =
0
;
for (iMonth =
1
; iMonth <
13
&& offset >
0
; iMonth++)
{
// 闰月
if (leapMonth >
0
&& iMonth == (leapMonth +
1
) && !leap)
{
--iMonth;
leap = true;
daysOfMonth = leapDays(year);
}
else
daysOfMonth = monthDays(year, iMonth);
offset -= daysOfMonth;
// 解除闰月
if (leap && iMonth == (leapMonth +
1
))
leap = false;
if (!leap)
monCyl++;
}
// offset为0时,并且刚才计算的月份是闰月,要校正
if (offset ==
0
&& leapMonth >
0
&& iMonth == leapMonth +
1
)
{
if (leap)
{
leap = false;
}
else
{
leap = true;
--iMonth;
--monCyl;
}
}
// offset小于0时,也要校正
if (offset <
0
)
{
offset += daysOfMonth;
--iMonth;
--monCyl;
}
month = iMonth;
day = offset +
1
;
}
public static String getChinaDayString(int day)
{
String chineseTen[] =
{ "初", "十", "廿", "卅" };
int n = day %
10
==
0
?
9
: day %
10
-
1
;
if (day >
30
)
return "";
if (day ==
10
)
return "初十";
else
return chineseTen[day /
10
] + chineseNumber[n];
}
public String toString()
{
return /* cyclical() + "年" + */(leap ? "闰" : "")
+ chineseNumber[month -
1
] + "月" + getChinaDayString(day);
}
public String numeric_md()
{// 返回阿拉伯数字的阴历日期
String temp_day;
String temp_mon;
temp_mon = month <
10
? "0" + month : "" + month;
temp_day = day <
10
? "0" + day : "" + day;
return temp_mon + temp_day;
}
public String get_month()
{// 返回阴历的月份
return chineseNumber[month -
1
];
}
public String get_date()
{// 返回阴历的天
return getChinaDayString(day);
}
public String get_Big_Or_Small()
{// 返回的月份的大或小
return Big_Or_Small[month -
1
];
}
}
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
【wpsshop博客】
推荐阅读
article
最新
Java
高频
面试
集锦
,
让你“
金九银
十”轻松斩获
offer
_高级
java
开发
面试
题大全...
这是一份全面的
Java
面试
指南
,
涵盖了从基础到高级的208道
面试
题
,
包括
Java
基础、容器、多线程、反射、网络、设计模式...
赞
踩
article
java
exec
执行
tar
_
java
调用
系统命令
获
MAC
、
解压缩
tar
包...
public class procee {public static void main(String[] args) ...
赞
踩
article
推荐文章:
阿里
云
SDK
管理型
凭证
提供者
for
Java
—— 让
云
服务访问更安全、便捷......
推荐文章:
阿里
云
SDK
管理型
凭证
提供者
for
Java
—— 让
云
服务访问更安全、便捷 aliyun-sdk-mana...
赞
踩
article
八大
排序
算法
总结与
java
实现_
八大
排序
算法
演示
java
csdn
...
原文链接:
八大
排序
算法
总结与
java
实现 - iTimeTraveler概述因为健忘,加上对各种
排序
算法
理解不深刻,过...
赞
踩
article
Java
集合框架:
Java
中的
优先级
队列
PriorityQueue
的实现_
java
coll...
在
Java
中是一种基于堆(Heap)数据结构实现的
优先级
队列。堆是一种特殊的完全二叉树,分为最小堆和最大堆。在最小堆...
赞
踩
article
RabbitMQ
之
Windows
下的
安装
部署
_
rabbitmq
-
java
-
client
插件下载...
本文详细介绍了在
Windows
环境下
安装
部署
RabbitMQ
的步骤,包括配置Erlang环境,设置环境变量,
安装
Rabb...
赞
踩
article
CentOS
上安装
Java
17...
要在
CentOS
上安装
Java
17,您可以使用多种方法。这里我将向您展示如何通过下载 Oracle 提供的 Ja...
赞
踩
article
【CentOS】
安装
Java
环境_
centos
安装
java
环境...
本文档详细介绍了如何在CentOS7系统上
安装
JDK 1.8。首先,通过XShell上传JDK
安装
包到指定目录并解压。接...
赞
踩
article
Java
SpringBoot
各种
参数
配置
方式的
优先级
_
java
启动
参数
优先级
...
本文主要讨论了在
Java
中,命令行
参数
(-Dxxx=xxx)的设置如何遵循
优先级
规则,即高于application.pr...
赞
踩
article
【
Java
Web】014 --
SpringBoot
原理(配置
优先级
、
Bean
管理、SpringB...
SpringBoot
原理(配置
优先级
、
Bean
管理、
SpringBoot
原理),内容注意包括:配置文件(.propert...
赞
踩
article
java
springboot
配置
方式
优先级
排序_
java
的
配置
文件
的
优先级
...
本文介绍了在SpringBoot项目中,包括application.yaml和application.propertie...
赞
踩
article
Java
8
并发
集合
:安全高效的
多线程
集合
_
concurrenthashmap
和concurrent...
在
多线程
环境中,使用线程安全的数据结构非常重要,以避免竞态条件和数据不一致的问题。
Java
8引入了一些
并发
集合
类,提供...
赞
踩
article
Java
并发
集合
:高效线程安全的
数据结构
...
Java
并发
集合
:高效线程安全的
数据结构
大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序...
赞
踩
article
Java
集合
系列之并发包(
java
.
util
.
concurrent
)下
的
高级
集合
类_
java
con...
先看一张描述
java
.
util
.
concurrent
包下
集合
组成结构
的
类图下列介绍
的
集合
统一特性:线程安全,支持并发操作...
赞
踩
article
【
Java
基础】
Java
并发
集合
容器_
java
并发
集合
...
ConcurrentHashMap是
Java
中的一个线程安全的哈希表实现,它是HashMap的线程安全版本。与HashM...
赞
踩
article
Java
-
正则表达式
...
Java
提供了 java.util.regex 包,它包含了 Pattern 和 Matcher 类,用于处理正则表达...
赞
踩
article
题解 | #最大差值# c++&
amp
;
java
&
amp
;
Python3
_
增长率
最高值与最低值相...
天地不仁,以万物为刍狗。今天笔试题一做,难度和之前站点都不在同一级别,SQL题是窗口聚合,编程题是一大堆,处理输入都要好...
赞
踩
article
华为
OD
机试
- 分
披萨
(
Java
& JS &
Python
&
C
&
C
++
)...
本文介绍了一道关于公平分
披萨
的算法问题,问题背景是吃货和馋嘴两人需要轮流从
披萨
切块中选取,以最大化吃货的份额。文章详细解...
赞
踩
article
【华为OD机试】
分
披萨
(
动态
规划-
Java
&
Python
&
C++
&JS实现)_
java
分
披萨
...
本文介绍了如何运用
动态
规划解决华为OD机试中的一道
分
披萨
问题。通过
分
析题意,阐述解题思路,提供
Java
、
Python
、C...
赞
踩
article
【
华为
OD
机试
真题
】456、
分
披萨
|
机试
真题
+
思路
参考+代码解析(CD卷)(本题
100%
)(C+...
题目描述>"吃货" 和 " 馋嘴 "两人到
披萨
店点了一份铁盘(圆形)
披萨
,并让店员将
披萨
按放射状切成大小相同的偶数扇形小...
赞
踩
相关标签
java
面试
开发语言
职场和发展
mysql
java exec执行tar
排序
排序算法
归并排序
冒泡排序
栗筝i 的 Java 技术栈
Java 基础
Java 集合
Java 堆排序
优先级队列
rabbitMQ安装部署
centos
linux
spring boot
Java Web
SpringBoot