`
liudaoru
  • 浏览: 1578631 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用java和js实现农历和阳历的转换[z]

    博客分类:
  • java
阅读更多

From: http://www.yuanma.org/data/2006/0914/article_1538.htm

js的实现:http://www.winu.cn/redirect.php?tid=71667&goto=lastpost

java 代码
  1. //测试类   
  2. public class Test ...{   
  3.   public static void main(String[] args) ...{   
  4.       //调用农历日期转换阳历日期方法   
  5.     System.out.println(Calendar.sCalendarLundarToSolar(2006,1,1));   
  6.   }   
  7. }   
  8.   
  9. //自定义日历类   
  10. class Calendar ...{   
  11.   
  12.  // Array lIntLunarDay is stored in the monthly day information in every year from 1901 to 2100 of the lunar calendar,   
  13.  // The lunar calendar can only be 29 or 30 days every month, express with 12(or 13) pieces of binary bit in one year,   
  14.  // it is 30 days for 1 form in the corresponding location , otherwise it is 29 days   
  15.  private static final int[] iLunarMonthDaysTable = ...{   
  16.      0x4ae00xa5700x52680xd2600xd9500x6aa80x56a00x9ad00x4ae80x4ae0,   // 1910   
  17.      0xa4d80xa4d00xd2500xd5480xb5500x56a00x96d00x95b00x49b80x49b0,   // 1920   
  18.      0xa4b00xb2580x6a500x6d400xada80x2b600x95700x49780x49700x64b0,   // 1930   
  19.      0xd4a00xea500x6d480x5ad00x2b600x93700x92e00xc9680xc9500xd4a0,   // 1940   
  20.      0xda500xb5500x56a00xaad80x25d00x92d00xc9580xa9500xb4a80x6ca0,   // 1950   
  21.      0xb5500x55a80x4da00xa5b00x52b80x52b00xa9500xe9500x6aa00xad50,   // 1960   
  22.      0xab500x4b600xa5700xa5700x52600xe9300xd9500x5aa80x56a00x96d0,   // 1970   
  23.      0x4ae80x4ad00xa4d00xd2680xd2500xd5280xb5400xb6a00x96d00x95b0,   // 1980   
  24.      0x49b00xa4b80xa4b00xb2580x6a500x6d400xada00xab600x93700x4978,   // 1990   
  25.      0x49700x64b00x6a500xea500x6b280x5ac00xab600x93680x92e00xc960,   // 2000   
  26.      0xd4a80xd4a00xda500x5aa80x56a00xaad80x25d00x92d00xc9580xa950,   // 2010   
  27.      0xb4a00xb5500xb5500x55a80x4ba00xa5b00x52b80x52b00xa9300x74a8,   // 2020   
  28.      0x6aa00xad500x4da80x4b600x95700xa4e00xd2600xe9300xd5300x5aa0,   // 2030   
  29.      0x6b500x96d00x4ae80x4ad00xa4d00xd2580xd2500xd5200xdaa00xb5a0,   // 2040   
  30.      0x56d00x4ad80x49b00xa4b80xa4b00xaa500xb5280x6d200xada00x55b0    // 2050   
  31.  };   
  32.   
  33.  // Array iLunarLeapMonthTable preserves the lunar calendar  leap month from 1901 to 2050,   
  34.  // if it is 0 express not to have , every byte was stored for two years   
  35.  private static final char[] iLunarLeapMonthTable = ...{   
  36.      0x000x500x040x000x20,   // 1910   
  37.      0x600x050x000x200x70,   // 1920   
  38.      0x050x000x400x020x06,   // 1930   
  39.      0x000x500x030x070x00,   // 1940   
  40.      0x600x040x000x200x70,   // 1950   
  41.      0x050x000x300x800x06,   // 1960   
  42.      0x000x400x030x070x00,   // 1970   
  43.      0x500x040x080x000x60,   // 1980   
  44.      0x040x0a0x000x600x05,   // 1990   
  45.      0x000x300x800x050x00,   // 2000   
  46.      0x400x020x070x000x50,   // 2010   
  47.      0x040x090x000x600x04,   // 2020   
  48.      0x000x200x600x050x00,   // 2030   
  49.      0x300xb00x060x000x50,   // 2040   
  50.      0x020x070x000x500x03    // 2050   
  51.  };   
  52.   
  53.  // Array iSolarLunarTable stored the offset days   
  54.  // in New Year of solar calendar and lunar calendar from 1901 to 2050;   
  55.  private static final char[] iSolarLunarOffsetTable = ...{   
  56.    49382846342443322140,  // 1910   
  57.    29483625443422413150,  // 1920   
  58.    38274635234332224029,  // 1930   
  59.    47362544342341304938,  // 1940   
  60.    26453524433221402847,  // 1950   
  61.    36264433234230483827,  // 1960   
  62.    45352443322039294736,  // 1970   
  63.    26453322413048372746,  // 1980   
  64.    35244332503928473626,  // 1990   
  65.    45342240304937274635,  // 2000   
  66.    23423121392848372544,  // 2010   
  67.    33234131503928473524,  // 2020   
  68.    42302140284736254333,  // 2030   
  69.    22413049372644332342,  // 2040   
  70.    31214029473625443222,  // 2050   
  71.  };   
  72.   
  73.   
  74.  static boolean bIsSolarLeapYear(int iYear)...{   
  75.   return ((iYear % 4 == 0) && (iYear % 100 != 0) || iYear % 400 == 0);   
  76.  }   
  77.   
  78.  // The days in the month of solar calendar   
  79.  static int iGetSYearMonthDays(int iYear, int iMonth)...{   
  80.   if((iMonth == 1) || (iMonth == 3) || (iMonth == 5)||   
  81.     (iMonth == 7) || (iMonth == 8) || (iMonth == 10) || (iMonth == 12))   
  82.     return 31;   
  83.    else if((iMonth == 4) || (iMonth == 6) || (iMonth == 9) || (iMonth == 11))   
  84.     return 30;   
  85.    else if(iMonth == 2)...{   
  86.     if(bIsSolarLeapYear(iYear)) return 29;   
  87.     else return 28;   
  88.    }   
  89.    else return 0;   
  90.  }   
  91.   
  92.  // The offset days from New Year and the day when point out in solar calendar   
  93.  static int iGetSNewYearOffsetDays(int iYear, int iMonth, int iDay)...{   
  94.   int iOffsetDays = 0;   
  95.   
  96.   for(int i = 1; i < iMonth; i++)...{   
  97.    iOffsetDays += iGetSYearMonthDays(iYear, i);   
  98.   }   
  99.   iOffsetDays += iDay -1;   
  100.   
  101.   return iOffsetDays;   
  102.  }   
  103.   
  104.  static int iGetLLeapMonth(int iYear)...{   
  105.   char iMonth = iLunarLeapMonthTable[(iYear - 1901) / 2];   
  106.   
  107.   if(iYear % 2 == 0)   
  108.    return (iMonth & 0x0f);   
  109.   else  
  110.    return (iMonth & 0xf0) >> 4;   
  111.  }   
  112.   
  113.  static int iGetLMonthDays(int iYear, int iMonth)...{   
  114.   int iLeapMonth = iGetLLeapMonth(iYear);   
  115.   if((iMonth > 12) && (iMonth - 12 != iLeapMonth) || (iMonth < 0))...{   
  116.    System.out.println("Wrong month, ^_^ , i think you are want a -1, go to death!");   
  117.    return -1;   
  118.   }   
  119.   if(iMonth - 12 == iLeapMonth)...{   
  120.    if((iLunarMonthDaysTable[iYear - 1901] & (0x8000 >> iLeapMonth)) == 0)   
  121.     return 29;   
  122.    else  
  123.     return 30;   
  124.   }   
  125.   if((iLeapMonth > 0) && (iMonth > iLeapMonth)) iMonth++;   
  126.   if((iLunarMonthDaysTable[iYear - 1901] & (0x8000 >> (iMonth - 1))) == 0)   
  127.    return 29;   
  128.   else  
  129.    return 30;   
  130.  }   
  131.   
  132.  // Days in this year of lunar calendar   
  133.  static int iGetLYearDays(int iYear)...{   
  134.   int iYearDays = 0;   
  135.   int iLeapMonth = iGetLLeapMonth(iYear);   
  136.   
  137.   for(int i = 1; i < 13; i++)   
  138.    iYearDays += iGetLMonthDays(iYear, i);   
  139.   if(iLeapMonth > 0)   
  140.    iYearDays += iGetLMonthDays(iYear, iLeapMonth + 12);   
  141.   return iYearDays;   
  142.  }   
  143.   
  144.  static int iGetLNewYearOffsetDays(int iYear, int iMonth, int iDay)...{   
  145.   int iOffsetDays = 0;   
  146.   int iLeapMonth = iGetLLeapMonth(iYear);   
  147.   
  148.   if((iLeapMonth > 0) && (iLeapMonth == iMonth - 12))...{   
  149.    iMonth = iLeapMonth;   
  150.    iOffsetDays += iGetLMonthDays(iYear, iMonth);   
  151.   }   
  152.   
  153.   for(int i = 1; i < iMonth; i++)...{   
  154.    iOffsetDays += iGetLMonthDays(iYear, i);   
  155.    if(i == iLeapMonth)   
  156.     iOffsetDays += iGetLMonthDays(iYear, iLeapMonth+12);   
  157.   }   
  158.   iOffsetDays += iDay - 1;   
  159.   
  160.   return iOffsetDays;   
  161.  }   
  162.   
  163.  // The solar calendar is turned into the lunar calendar   
  164.  static String sCalendarSolarToLundar(int iYear, int iMonth, int iDay)...{   
  165.   int iLDay, iLMonth, iLYear;   
  166.   int iOffsetDays = iGetSNewYearOffsetDays(iYear, iMonth, iDay);   
  167.   int iLeapMonth = iGetLLeapMonth(iYear);   
  168.   
  169.   if(iOffsetDays < iSolarLunarOffsetTable[iYear - 1901] )...{   
  170.    iLYear = iYear - 1;   
  171.    iOffsetDays = iSolarLunarOffsetTable[iYear - 1901] - iOffsetDays;   
  172.    iLDay = iOffsetDays;   
  173.   
  174.    for(iLMonth = 12; iOffsetDays > iGetLMonthDays(iLYear, iLMonth); iLMonth--)...{   
  175.     iLDay = iOffsetDays;   
  176.     iOffsetDays -= iGetLMonthDays(iLYear, iLMonth);   
  177.    }   
  178.    if(0 == iLDay)   
  179.     iLDay = 1;   
  180.    else  
  181.     iLDay = iGetLMonthDays(iLYear, iLMonth) - iOffsetDays + 1;   
  182.   }   
  183.   else...{   
  184.    iLYear = iYear;   
  185.    iOffsetDays -= iSolarLunarOffsetTable[iYear - 1901];   
  186.    iLDay = iOffsetDays + 1;   
  187.   
  188.    for(iLMonth = 1; iOffsetDays >= 0; iLMonth++)...{   
  189.     iLDay = iOffsetDays + 1;   
  190.     iOffsetDays -= iGetLMonthDays(iLYear, iLMonth);   
  191.     if((iLeapMonth == iLMonth) && (iOffsetDays > 0))...{   
  192.      iLDay = iOffsetDays;   
  193.      iOffsetDays -= iGetLMonthDays(iLYear, iLMonth + 12);   
  194.      if(iOffsetDays <= 0)...{   
  195.       iLMonth += 12 + 1;   
  196.       break;   
  197.      }   
  198.     }   
  199.    }   
  200.    iLMonth--;   
  201.   }   
  202.   return "" + iLYear + (iLMonth > 9 ? "" + iLMonth : "0" + iLMonth)   
  203.    + (iLDay > 9 ? "" + iLDay : "0" + iLDay);   
  204.  }   
  205.   
  206.  // The lunar calendar is turned into the Solar calendar   
  207.  static String sCalendarLundarToSolar(int iYear, int iMonth, int iDay)...{   
  208.   int iSYear, iSMonth, iSDay;   
  209.   int iOffsetDays = iGetLNewYearOffsetDays(iYear, iMonth, iDay) + iSolarLunarOffsetTable[iYear - 1901];   
  210.   int iYearDays = bIsSolarLeapYear(iYear) ? 366 : 365;   
  211.   
  212.   if(iOffsetDays >= iYearDays)...{   
  213.    iSYear = iYear + 1;   
  214.    iOffsetDays -= iYearDays;   
  215.   }   
  216.   else ...{   
  217.    iSYear = iYear;   
  218.   }   
  219.   iSDay = iOffsetDays + 1;   
  220.   for(iSMonth = 1; iOffsetDays >= 0; iSMonth++)...{   
  221.    iSDay = iOffsetDays + 1;   
  222.    iOffsetDays -= iGetSYearMonthDays(iSYear, iSMonth);   
  223.   }   
  224.   iSMonth--;   
  225.   
  226.   return "" + iSYear + (iSMonth > 9 ? iSMonth + "" : "0" + iSMonth)   
  227.    + (iSDay > 9 ? iSDay + "" : "0" + iSDay);   
  228.  }   
  229. }   
  230.   
  231. //自定义星期类   
  232. class Week...{   
  233.  int iWeek;   
  234.  private String sWeek[] = ...{   
  235.    "Sunday""Monday""Tuesday""Wednesday""Thursday""Friday""Saturday"  
  236.  };   
  237.   
  238.  public Week()...{   
  239.   iWeek = 0;   
  240.  }   
  241.   
  242.  public Week(int w)...{   
  243.   if((w > 6) || (w < 0))...{   
  244.    System.out.println("Week out of range, I think you want Sunday");   
  245.    this.iWeek = 0;   
  246.   } else  
  247.    this.iWeek = w;   
  248.  }   
  249.   
  250.  public String toString()...{   
  251.   return sWeek[iWeek];   
  252.  }   
  253. }   
  254.   
  255. //自定义日期类   
  256. class MyDate ...{   
  257.   
  258.  public int iYear;   
  259.  public int iMonth;   
  260.  public int iDay;   
  261.   
  262.  private static int checkYear(int iYear)...{   
  263.   if((iYear > 1901) && (iYear < 2050))   
  264.    return iYear;   
  265.   else...{   
  266.    System.out.println("The Year out of range, I think you want 1981");   
  267.    return 1981;   
  268.  }   
  269.  }   
  270.   
  271.  public MyDate(int iYear, int iMonth, int iDay)...{   
  272.   this.iYear = checkYear(iYear);   
  273.   this.iMonth = iMonth;   
  274.   this.iDay = iDay;   
  275.  }   
  276.   
  277.  public MyDate(int iYear, int iMonth)...{   
  278.   this.iYear = checkYear(iYear);   
  279.   this.iMonth = iMonth;   
  280.   this.iDay = 1;   
  281.  }   
  282.   
  283.  public MyDate(int iYear)...{   
  284.   this.iYear = checkYear(iYear);   
  285.   this.iMonth = 1;   
  286.   this.iDay = 1;   
  287.  }   
  288.   
  289.  public MyDate()...{   
  290.   this.iYear = 1981;   
  291.   this.iMonth = 1;   
  292.   this.iDay = 1;   
  293.  }   
  294.   
  295.  public String toString()...{   
  296.   return ""this.iYear +   
  297.    (this
分享到:
评论

相关推荐

    java(阳历转换为农历).pdf

    Java是一种广泛使用的编程语言,通过使用Java语言,可以实现阳历日期到农历日期的转换。 知识点一:Java中的日期类 在Java中,日期类是java.util包下的一个类,提供了日期和时间相关的操作。Date类有多个构造函数...

    java 阳历转换农历

    ### Java实现阳历转换农历工具类 在Java编程语言中,实现阳历(公历)与农历之间的转换是一项实用的功能,特别是在需要根据农历日期进行计算或处理特定中国文化节日的应用场景中。下面将详细介绍如何通过一个Java类...

    java阳历转农历

    在 Java 中,实现阳历转农历需要使用到 Calendar 和 Date 类。Calendar 类提供了一个抽象的日历模型,可以用来计算日期的年、月、日等信息。Date 类则提供了一个具体的日期对象,可以用于获取当前日期或指定日期。 ...

    java 万年历(农历和阳历的互换)

    农历和阳历是两种不同的日期表示方式,理解和实现它们之间的转换需要深入理解日期计算的原理和算法。 阳历,也称为公历,是国际上广泛使用的日历系统,基于地球绕太阳公转的周期。Java中处理阳历的主要类是`java....

    一个比较综合的阴历和阳历转换的java源程序

    本文将深入探讨一份关于阴历(农历)与阳历(公历)转换的Java源代码,这份代码不仅提供了两种历法之间的相互转换功能,还包含了丰富的节日信息,以及用户友好的界面设计。通过分析代码结构、关键类与方法,以及实现...

    阳历and阴历转换.rar_MATLAB 阴历_MATLAB 阴历阳历_阴历阳历

    在提供的“阳历and阴历转换.rar”压缩包中,包含了一个利用MATLAB实现的阴历与阳历转换工具。这个工具对于那些需要处理与日期相关的程序,特别是在中国或其他使用农历的国家和地区,是非常有用的。 首先,我们要...

    阴阳历转换软件源码,实现阴阳历之间的转换

    3. **编程语言基础**:此源码可能是用某一种编程语言实现的,如C++、Java、Python或JavaScript等。理解源码需要对应语言的基础知识。 4. **数据结构和算法**:在处理日期转换时,可能会用到日期类对象、栈、队列等...

    excel阳历阴历的相互转换

    Excel 阳历阴历相互转换 ...本文详细介绍了如何使用 VBA 编辑器在 Excel 中实现阳历阴历相互转换,提供了四个函数用于实现阳历阴历转换和阴阳历生日计算,并提供了相关的日期计算函数和数据结构。

    阴历阳历转换器

    这个转换器能够帮助用户在阳历和阴历之间进行转换,这对于了解和使用中国传统农历的场合非常有用。 汇编语言的使用虽然相对复杂,但它提供了对硬件的直接控制,使得程序员可以精确地调整计算过程,从而在特定任务上...

    MATLAB实现阳历、阴历与干支历的日期转换

    在MATLAB编程环境中,我们可以创建一个名为`clsdate.m`的函数来实现阳历、阴历和干支历之间的转换。这个功能强大的工具对于研究中国传统文化、天文历法或者进行相关数据分析都极其有用。以下是对这个`clsdate.m`函数...

    js实现阳历到阴历的转换

    js实现阳历到阴历的转换.

    中国农历,阳历互换(Java 源代码)

    本主题将详细介绍如何在Java中实现农历和阳历之间的转换。 首先,Java标准库并没有内置农历日期的支持,但我们可以利用第三方库,如`FastDateFormat`或`org.apache.commons.lang3.time.DateUtils`来处理阳历日期。...

    java源程序-阴历和阳历

    在Java编程语言中,开发一个能够处理阴历和阳历转换的程序是一项有趣且具有挑战性的任务。这个名为“java源程序-阴历和阳历”的项目似乎是一个2008年的beta版本,旨在提供从1900年到2049年间的完整农历数据。下面将...

    c#阴阳历转换

    对于“C#阴阳历转换”这个小程序,它的核心功能就是将公历(阳历)日期转换为农历(阴历),反之亦然。这样的工具在日历应用、中国传统节日提醒、星座运势查询等领域非常有用。 首先,我们需要了解阴阳历的基本概念...

    阳历阴历的转换

    转换阳历与阴历涉及到复杂的天文计算。阳历转阴历需要考虑以下几点: 1. 年份转换:阳历的年份需要找到对应的阴历年份。由于闰年的存在,每19个阳历年会有7个闰年,阴历与阳历的对应关系并非简单的一一对应。 2. ...

    java类:阳历转换阴历

    将阳历转换阴历: 2010年2月24日 星期三 15:10 庚寅年(虎)正月十一申时

    Qt/C++实现阳历转农历功能

    3. **实现转换函数**:这是整个项目的重点。你需要一个函数接收阳历日期,然后调用农历转换算法。这个函数可以是这样的: ```cpp QDate convertSolarToLunar(const QDate &solarDate) { // 实现农历转换算法,这里...

    MySQL阳历转农历SQL实现

    MySQL阳历转农历SQL实现 在mysql上通过SQL语言实现的阳历转农历, 年份跨越从1900到2049年.

    超级酷的阴历阳历转换

    新建一个java类复制粘贴运行即可,可以实现各个年份阴历阳历的转换

    MATLAB实现阳历、阴历与干支历的日期转换(1)实现阴历与阳历

    MATLAB实现阳历、阴历与干支历的日期转换(1)实现阴历与阳历的相互转换;2)实现阳历、阴历与干支历的转换(3)不仅包含传统阴历月的天数表,还新增历年干支月的天数表;; 1

Global site tag (gtag.js) - Google Analytics