/**

* 阴历(农历)信息

*

* @author looly

* @since 5.4.1

*/

public class LunarInfo{

public static final int BASE_YEAR = 1900;

/**

* 此表来自:https://github.com/jjonline/calendar.js/blob/master/calendar.js

* 农历表示:

* 1. 表示当年有无闰年,有的话,为闰月的月份,没有的话,为0。

* 2-4.为除了闰月外的正常月份是大月还是小月,1为30天,0为29天。

* 5. 表示闰月是大月还是小月,仅当存在闰月的情况下有意义。

*/

private static final long[] LUNAR_CODE = new long[]{

0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,//1900-1909

0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,//1910-1919

0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,//1920-1929

0x06566, 0x0d4a0, 0x0ea50, 0x16a95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,//1930-1939

0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,//1940-1949

0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0,//1950-1959

0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,//1960-1969

0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6,//1970-1979

0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,//1980-1989

0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0,//1990-1999

0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,//2000-2009

0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,//2010-2019

0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,//2020-2029

0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,//2030-2039

0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0,//2040-2049

0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0,//2050-2059

0x092e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4,//2060-2069

0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0,//2070-2079

0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160,//2080-2089

0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252,//2090-2099

};

/**

* 获取支持的最大年(包括)

*

* @return 最大年(包括)

*/

public static int getMaxYear(){

return BASE_YEAR + LUNAR_CODE.length - 1;

}

/**

* 传回农历 y年的总天数

*

* @param y 年

* @return 总天数

*/

public static int yearDays(int y){

int i, sum = 348;

for (i = 0x8000; i > 0x8; i >>= 1) {

if ((getCode(y) & i) != 0)

sum += 1;

}

return (sum + leapDays(y));

}

/**

* 传回农历 y年闰月的天数

*

* @param y 年

* @return 闰月的天数

*/

public static int leapDays(int y){

if (leapMonth(y) != 0) {

return (getCode(y) & 0x10000) != 0 ? 30 : 29;

}

return 0;

}

/**

* 传回农历 y年m月的总天数

*

* @param y 年

* @param m 月

* @return 总天数

*/

public static int monthDays(int y, int m){

return (getCode(y) & (0x10000 >> m)) == 0 ? 29 : 30;

}

/**

* 传回农历 y年闰哪个月 1-12 , 没闰传回 0

*

* @param y 年

* @return 润的月, 没闰传回 0

*/

public static int leapMonth(int y){

return (int) (getCode(y) & 0xf);

}

/**

* 获取对应年的农历信息

*

* @param year 年

* @return 农历信息

*/

private static long getCode(int year){

return LUNAR_CODE[year - BASE_YEAR];

}

}

java 农历_JAVA工具例大全--阴历(农历)信息 源代码相关推荐

  1. java abs前缀变量_JAVA工具例大全--cn.hutool.setting.AbsSetting读取配置文件例子

    用类cn.hutool.setting.AbsSetting的如下方法:getChar public Character getChar(String key, String group) 获取cha ...

  2. java settings文件夹_JAVA工具例大全--Setting文件读取配置参数

    用类cn.hutool.setting.AbsSetting的如下方法:getDouble public Double getDouble(String key, String group) 获取do ...

  3. Java 判空工具方法大全

    java 判空工具方法大全 前言 一.一般类型的判空 1.String 类型判空 2.包装类型判空 二.类对象判空 1.类对象判空 三.容器类型判空 1.List.Set 判空 2.Map 判空 前言 ...

  4. java lunar_JAVA工具例大全--获得中国农历及润月月份

    /** * 阴历(农历)信息 * * @author looly * @since 5.4.1 */ public class LunarInfo{ public static final int B ...

  5. 【深入理解java虚拟机v3 】 4.2.6 jstack:Java堆栈跟踪工具(查看所有的线程信息占cpu最高的进程和线程)

    文章目录 1. 原文概述 补充概述 2. 例子 2.1 用jstack加进程id查找死锁 2.2 jstack统计线程数 2.3 jstack检测cpu高 3. 实战 3.1 一次cpu高的实战记录 ...

  6. java操作_JAVA操作文件大全(一)

    package com.pengyue; import java.io.*; public class FileOperate { public FileOperate() { } /** * 新建目 ...

  7. java常用开发工具下载大全

    Maven-3.5.2下载:https://pan.baidu.com/s/1iOzrLbJSvlmbofv6GlAT_g 密码:zeda 新版eclipse下载:https://pan.baidu. ...

  8. linux下 java 文本_Java中如何将输入的信息写入文本中

    要把信息写入文本中进行固化存储是开发中经常用到的一种方法,下面是具体的操作流程,(文中只涉及核心代码,不是完整的项目). try{ File file = new File("mnt/sdc ...

  9. 闲鱼java系统_java爬取闲鱼商品信息(一)

    闲鱼真是一个很神奇的地方,= =能让我等学生狗不用花很多钱就能体验科技的乐趣,当然,前提是别翻车. 好了,这当然是题外话,这阵子总结了自己学习的一些技能,就写一个对闲鱼的数据抓取来练练手. 预计达到的 ...

最新文章

  1. hadoop hbase维护问题总结
  2. 【9915】乘积最大
  3. “sql2005管道的另一端上无任何进程”及附带一系列问题完整解决方法
  4. python列表删除重复项_五分钟学会三种Excel重复项删除方法,工作效率大杀器!...
  5. 仿抖音注册Dialog实现
  6. 北大保安又双叒…出“传奇”!这次是挑战“天下第一考”
  7. sklearn 常用模块及类与方法
  8. Android之使用SoundPool播放一小段音频,实现猜歌的功能
  9. Python3.x Numpy中的array数组_矩阵操作
  10. 站长吧asp工具设置_网站更换域名需要怎么办?网站更换域名如何设置?
  11. 加速深度学习在线部署,TensorRT安装及使用教程
  12. MATLAB高斯迭代算法,基于MATLAB实现高斯赛德尔迭代潮流计算.pdf
  13. JAVA面试技巧之项目介绍
  14. 计算机很多文件无法删除,电脑有文件删不掉怎么办?电脑有文件删不掉解决方法介绍...
  15. 华文慕课计算机组成结构第二章课后习题解析
  16. [ JAVA ] 共有前缀
  17. android多个下拉控件,Android实现支持所有View的通用的下拉刷新控件
  18. Java项目安全问题及解决方案
  19. 火狐浏览器添加自动阻止加密挖矿选项
  20. iMeta | 青岛华大范广益组基于共标签测序数据的高质量宏基因组组装工具MetaTrass...

热门文章

  1. 安徽大学教育部计算机,2014安徽大学计算机教学部试题及答案
  2. Linux加法简单程序,Linux操作之——简单命令
  3. Vmware搭建hadoop集群(一)
  4. Kibana文档操作
  5. 设定了所有种子后每次结果还是不一样 pytorch可重复 可复现问题
  6. Micromedia Flash Player已终止一项可能不安全的操作的解决办法
  7. 使用photoshop将图片制作成圆形
  8. 2021年中国LED驱动器(LED照明驱动器)市场趋势报告、技术动态创新及2027年市场预测
  9. 8口千兆工业级以太网光纤收发器 4光4电全千兆导轨式工业以太网交换机 宽温交换机
  10. 特殊字符、数字开头,及中英文字符排序(类似通讯录)