- 浏览: 517165 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
package com.sysoft.oa.rc.bean; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; public class ChinaDate { final private 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 }; final private static int[] year20 = new int[] { 1, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 }; final private static int[] year19 = new int[] { 0, 3, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 }; final private static int[] year2000 = new int[] { 0, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 }; public final static String[] nStr1 = new String[] { "", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" }; private final static String[] Gan = new String[] { " 甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" }; private final static String[] Zhi = new String[] { " 子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" }; private final static String[] Animals = new String[] { " 鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" }; private final static String[] solarTerm = new String[] { " 小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" }; private final static String[] sFtv = new String[] { "0101* 元旦", "0214 情人节", "0308 妇女节", "0312 植树节", "0315 消费者权益日", "0401 愚人节", "0501 劳动节", "0504 青年节", "0512 护士节", "0601 儿童节", "0701 建党节", "0801 建军节", "0808 父亲节", "0909 maozedong逝世纪念", "0910 教师节", "0928 孔子诞辰", "1001*国庆节", "1006 老人节", "1024 联合国日", "1112 孙中山诞辰", "1220 澳门回归", "1225 圣诞节", "1226 maozedong诞辰" }; private final static String[] lFtv = new String[] { "0101* 农历春节", "0115 元宵节", "0505 端午节", "0707 七夕情人节", "0815 中秋节", "0909 重阳节", "1208 腊八节", "1224 小年", "0100*除夕" }; /** * 传回农历 y年的总天数 51. * 52. * @param y 53. * @return 54. */ final private static int lYearDays(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年闰月的天数 66. * 67. * @param y 68. * @return 69. */ 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 . * 83. * @param y 84. * @return 85. */ final private static int leapMonth(int y) { return (int) (lunarInfo[y - 1900] & 0xf); } /** * 91. * 传回农历 y年m月的总天数 92. * 93. * @param y 94. * @param m 95. * @return 96. */ final private static int monthDays(int y, int m) { if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) return 29; else return 30; } /** * 105. * 传回农历 y年的生肖 106. * 107. * @param y 108. * @return 109. */ final public static String AnimalsYear(int y) { return Animals[(y - 4) % 12]; } /** * 115. * 传入 月日的offset 传回干支,0=甲子 116. * 117. * @param num 118. * @return * 119. */ final private static String cyclicalm(int num) { return (Gan[num % 10] + Zhi[num % 12]); } /** * 125. * 传入 offset 传回干支, 0=甲子 126. * 127. * @param y 128. * @return 129. */ final public static String cyclical(int y) { int num = y - 1900 + 36; return (cyclicalm(num)); } /** * 136. * 传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6 137. * * 138. * @param y 139. * @param m 140. * @return 141. */ final private long[] Lunar(int y, int m) { long[] nongDate = new long[7]; int i = 0, temp = 0, leap = 0; Date baseDate = new GregorianCalendar(1900 + 1900, 1, 31).getTime(); Date objDate = new GregorianCalendar(y + 1900, m, 1).getTime(); long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L; if (y < 2000) offset += year19[m - 1]; if (y > 2000) offset += year20[m - 1]; if (y == 2000) offset += year2000[m - 1]; nongDate[5] = offset + 40; nongDate[4] = 14; for (i = 1900; i < 2050 && offset > 0; i++) { temp = lYearDays(i); offset -= temp; nongDate[4] += 12; } if (offset < 0) { offset += temp; i--; nongDate[4] -= 12; } nongDate[0] = i; nongDate[3] = i - 1864; leap = leapMonth(i); // 闰哪个月 nongDate[6] = 0; for (i = 1; i < 13 && offset > 0; i++) { // 闰月 if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i; nongDate[6] = 1; temp = leapDays((int) nongDate[0]); } else { temp = monthDays((int) nongDate[0], i); } // 解除闰月 if (nongDate[6] == 1 && i == (leap + 1)) nongDate[6] = 0; offset -= temp; if (nongDate[6] == 0) nongDate[4]++; } if (offset == 0 && leap > 0 && i == leap + 1) { if (nongDate[6] == 1) { nongDate[6] = 0; } else { nongDate[6] = 1; --i; --nongDate[4]; } } if (offset < 0) { offset += temp; --i; --nongDate[4]; } nongDate[1] = i; nongDate[2] = offset + 1; return nongDate; } /** * 210. * 传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 * .isLeap6 211. * 212. * @param y 213. * @param m 214. * @param d 215. * @return * 216. */ final public static long[] calElement(int y, int m, int d) { long[] nongDate = new long[7]; int i = 0, temp = 0, leap = 0; Date baseDate = new GregorianCalendar(0 + 1900, 0, 31).getTime(); Date objDate = new GregorianCalendar(y, m - 1, d).getTime(); long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L; nongDate[5] = offset + 40; nongDate[4] = 14; for (i = 1900; i < 2050 && offset > 0; i++) { temp = lYearDays(i); offset -= temp; nongDate[4] += 12; } if (offset < 0) { offset += temp; i--; nongDate[4] -= 12; } nongDate[0] = i; nongDate[3] = i - 1864; leap = leapMonth(i); // 闰哪个月 nongDate[6] = 0; for (i = 1; i < 13 && offset > 0; i++) { // 闰月 if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i; nongDate[6] = 1; temp = leapDays((int) nongDate[0]); } else { temp = monthDays((int) nongDate[0], i); } // 解除闰月 if (nongDate[6] == 1 && i == (leap + 1)) nongDate[6] = 0; offset -= temp; if (nongDate[6] == 0) nongDate[4]++; } if (offset == 0 && leap > 0 && i == leap + 1) { if (nongDate[6] == 1) { nongDate[6] = 0; } else { nongDate[6] = 1; --i; --nongDate[4]; } } if (offset < 0) { offset += temp; --i; --nongDate[4]; } nongDate[1] = i; nongDate[2] = offset + 1; return nongDate; } public final static String getChinaDate(int day) { String a = ""; if (day == 10) return "初十"; if (day == 20) return "二十"; if (day == 30) return "三十"; int two = (int) ((day) / 10); if (two == 0) a = "初"; if (two == 1) a = "十"; if (two == 2) a = "廿"; if (two == 3) a = "三"; int one = (int) (day % 10); switch (one) { case 1: a += "一"; break; case 2: a += "二"; break; case 3: a += "三"; break; case 4: a += "四"; break; case 5: a += "五"; break; case 6: a += "六"; break; case 7: a += "七"; break; case 8: a += "八"; break; case 9: a += "九"; break; } return a; } public static String today() { Calendar today = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE); int year = today.get(Calendar.YEAR); int month = today.get(Calendar.MONTH) + 1; int date = today.get(Calendar.DATE); long[] l = calElement(year, month, date); StringBuffer sToday = new StringBuffer(); try { sToday.append(sdf.format(today.getTime())); sToday.append(" 农历"); sToday.append(cyclical(year)); sToday.append('('); sToday.append(AnimalsYear(year)); sToday.append(")年"); sToday.append(nStr1[(int) l[1]]); sToday.append("月"); sToday.append(getChinaDate((int) (l[2]))); return sToday.toString(); } finally { sToday = null; } } public static String nowChinaMonthDay(){ Calendar today = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE); int year = today.get(Calendar.YEAR); int month = today.get(Calendar.MONTH) + 1; int date = today.get(Calendar.DATE); long[] l = calElement(year, month, date); StringBuffer sToday = new StringBuffer(); sToday.append(nStr1[(int) l[1]]); sToday.append("月"); sToday.append(getChinaDate((int) (l[2]))); return sToday.toString(); } private static SimpleDateFormat sdf = new SimpleDateFormat( "yyyy年M月d日 EEEEE"); /** * 354. * 农历日历工具使用演示 355. * 356. * @param args 357. */ public static void main(String[] args) { System.out.println(today()); Calendar c = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE); System.out.println( c.get(Calendar.DAY_OF_WEEK)); System.out.println(c.get(Calendar.DAY_OF_MONTH)); } }
发表评论
文章已被作者锁定,不允许评论。
-
Java8 ,JDK1.8 新特性
2016-12-08 14:58 773一、接口的默认方法 Java 8允许我们给接口 ... -
Google Guava官方教程 学习
2016-12-05 17:43 346http://ifeve.com/google- ... -
Guava 相关内容(一)
2016-05-20 00:08 519一、Java 不可以变的集合 Guava学习笔记: ... -
poi excel 相关
2015-04-07 11:22 691一、poi excel 分组(group) ... -
java 相关问题(四)
2013-05-24 15:54 1245十九、Java中对Map(HashMap,TreeMap, ... -
apache-common
2013-01-09 10:47 1048... -
Java注释的写法
2012-11-16 15:02 781一. Java 文档 // 注释 ... -
正则表达式
2012-05-25 09:19 973编程的大量工作都是在处理字符串,如验证输入、查 ... -
java 相关问题(三)
2012-03-08 16:31 1503十三、java 实现 调用 打印机 代码详解 ... -
J2EE秘籍
2012-02-13 15:42 720转:http://zhufeng1981.iteye.com/ ... -
java 相关问题(二)
2011-08-02 15:47 1091七、ThreadLocal 详解 首先,Thre ... -
Apache Commons BeanUtils
2011-06-08 17:24 1546功能说明: 顾名思义,Bean Utility就是Bean小 ... -
java 相关问题(一)
2011-05-10 19:16 1032一、 java Cloneable 详 ... -
java 读写 properties
2011-04-19 14:15 1213一、 /* * @(#)RWProper ... -
JMS API 中文版
2011-04-13 14:20 826转:http://www.iteye.com/to ... -
ant 教程
2011-04-12 23:56 1157一、ant 教程 1 Ant是什么? ... -
properties 文件中 定义内容 相关问题
2011-02-22 20:41 2265一、在 properties 文件中 定义{ } 会 ... -
java 线程
2011-02-10 17:07 924一、 Runnable、 Thread ... -
java.util.logging (不用log4j配置,自己写log文件)
2010-10-11 11:55 7450<!-- Generated by javadoc ( ... -
java 静态块 非静态块
2010-09-21 17:39 1417一。一个简单的例子 1. 所有静态的(无论其是变量 ...
相关推荐
微软的中国农历日期和时间组件(Microsoft.Chinese.Date&Time)是专为Windows操作系统设计的一款实用工具,旨在提供农历日期和时间的显示功能。这款软件是微软为了满足在中国及全球华人社区用户的需求而开发的,它...
升级版DateUtil.java 得到几天后的date,根据农历生日计算出年龄,判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
2. **阴历支持**:在许多国家和地区,尤其是中国,阴历(农历)在节日、日常生活等方面仍然被广泛使用。因此,在网页应用中提供阴历功能是必要的。实现阴历功能通常需要额外的算法库,比如Chinese Lunar Calendar,...
在JavaScript中,原生的`Date`对象并不支持农历,因此我们需要使用第三方库或者自定义函数来实现农历日期的转换和显示。这个"带农历的js日期显示"库通过`time.js`文件实现了这一功能。这个库可能包含以下关键组件: ...
在 Java 中,实现阳历转农历需要使用到 Calendar 和 Date 类。Calendar 类提供了一个抽象的日历模型,可以用来计算日期的年、月、日等信息。Date 类则提供了一个具体的日期对象,可以用于获取当前日期或指定日期。 ...
而农历,又称阴历,是一种与月亮盈亏周期相关的日历系统,通常在中国、韩国、越南等亚洲国家使用。农历一年有12个月,每个月约29.5天,因此农历年通常比公历年短。 要实现农历与公历之间的转换,我们可以使用第三方...
LunarCalendar返回农历(阴历)日期的JAR包 根据指定日期计算对应农历日期(这个计算方法是网上找的,最初的作者是谁已经无法考证了,感谢网络资源吧!),本人封装成好用的JAR包后发不出来,供大家免费下载! ...
Oracle数据库系统提供了强大的日期处理功能,其中包括将公历(阳历)日期转换为农历日期。在Oracle中,虽然没有内置的直接转换函数来实现这一功能,但可以通过自定义函数或者利用现有的开源存储过程来实现这一转换。...
方便你查农历,Microsoft Corporation制作
return `${date.getFullYear()}-${date.getMonth()+1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; } var now = new Date(); console.log(formatTime(now)); ``` 3. *...
2. **农历算法**:农历,也称为阴历,是一种根据月亮的相位来计算日期的系统,与公历(阳历)主要依据太阳运行周期不同。农历算法比较复杂,涉及到月相、闰月和节气等因素。公历到农历的转换通常包括以下几个步骤:...
万年历不仅可以显示阳历日期,还可以包括农历和阴历的信息,同时具备记事录功能,这对于日常管理和规划活动非常有用。以下是关于这个主题的一些关键知识点: 1. **VBA基础**:Visual Basic for Applications(VBA)...
在JavaScript中实现阴历功能,需要引入一个可靠的农历转换库,如`lunar-js`或`chinese-calendar`。这些库提供了从公历到农历的转换方法。例如,可以调用`lunar.toSolar(year, month, day)`将农历日期转换为公历,...
农历,又称阴历,主要根据月亮的盈亏周期来确定月份。中国的农历是一种阴阳合历,结合了太阳和月亮的运行规律,与公历相比,月份和日期的对应关系更为复杂。Java标准库并未提供内置的农历类,因此需要自定义实现。 ...
这个压缩包中的内容,"vc中国农历阴历算法",显然涉及到使用Visual C++实现的农历转换算法。农历,也称为阴历,是中国传统历法,与公历不同,它的月份基于月亮的相位变化,而非太阳回归年。在开发涉及到中国传统文化...
在VB6.0编程环境中,开发一个能够实时显示阳历、阴历、星期以及本年属相的程序是一项常见的需求。这个程序可以帮助用户快速获取日期相关的多种信息,尤其是在需要考虑农历和生肖的传统节日或者活动中。下面我们将...
在JavaScript中,原生的`Date`对象并不支持农历日期的处理,因此我们需要借助第三方库或者自定义函数来实现。以下是一个可能的实现方案: 1. **获取公历日期和星期**:JavaScript的`Date`对象可以方便地获取当前...
而阴历则是根据月亮的相位变化来确定月份的历法,主要用于中国的农历和其他一些亚洲国家的传统节日。 在PowerBuilder(PB)中,我们可以创建一个应用程序来调用外部的动态链接库(DLL)来完成特定的任务,比如日期...
"Java阳历转换为农历" java阳历转换为农历是指将公历日期转换为农历日期的过程。Java是一种广泛使用的编程语言,通过使用Java语言,可以实现阳历日期到农历日期的转换。 知识点一:Java中的日期类 在Java中,日期...
农历,又称阴历,是以月亮的盈亏周期为一个月,结合太阳回归年调整月份,以确保年的平均长度接近太阳年的制度。在中国,农历不仅用于记录日期,还与许多传统节日和习俗密切相关。 要在网页上展示农历日历,我们可以...