文档章节

Android平台下的一个好用的日历库(sxtwl_cpp),支持农历转公历,和公历转农历等功能

元谷
 元谷
发布于 09/21 12:30
字数 761
阅读 113
收藏 0

sxtwl_cpp是寿星天文历的C++版本实现。支持多种语言的绑定

python版的sxtwl_cpp传送入口

在build.gradle的allprojects中加入

maven { url 'https://dl.bintray.com/yuangu/sxtwl' }

最终如下面代码所示:

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/yuangu/sxtwl' }
    }
}

最后在dependencies中加入

implementation 'com.huoyaojing:sxtwl:1.0.3'

即可

使用事例:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.huoyaojing.sxtwl.Day;
import com.huoyaojing.sxtwl.GZ;
import com.huoyaojing.sxtwl.Lunar;
import com.huoyaojing.sxtwl.Month;
import com.huoyaojing.sxtwl.Year;

public class MainActivity extends AppCompatActivity {
    String[] Gan = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"};
    String[] Zhi = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"};
    String[] ShX = {"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};
    String[] numCn = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
    String[] jqmc = {"冬至", "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑","白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪"};
    String[] ymc = {"十一", "十二", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
    String[] rmc = {"初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"};

    private void log(String str)
    {
        Log.d(this.getClass().getName(), str);
    }

    private void printDay(Day day)
    {
        log("===================================================");
        log("公历:" + day.getY() + "年" + day.getM() + "月" + day.getD() + "日");
        if(day.getLleap()) //是否是阴历润月
        {
            log("农历:" +"润" + (day.getLyear0() + 1984)  + "年" +   ymc[day.getLmc()] + "月" + rmc[day.getLdi()] + "日");
        }else
        {
            log("农历:" + (day.getLyear0() + 1984)  + "年" +   ymc[day.getLmc()] + "月" + rmc[day.getLdi()] + "日");
        }

        log("儒略历:JD" + J2000 + day.getD0());
        log("星期" + numCn[day.getWeek()]);

        log("天干:" +  Gan[day.getLyear2().getTg()]  + Zhi[day.getLyear2().getDz()] + "年"
            +  Gan[day.getLmonth2().getTg()]  + Zhi[day.getLmonth2().getDz()] + "月"
            +  Gan[day.getLday2().getTg()]  + Zhi[day.getLday2().getDz()] + "日"
        );

        if(day.getQk() >= 0)
        {
            log("当日节气:" + jqmc[day.getJqmc()]) ;
            log("节气时间:" + day.getJqsj());
        }

        //day.getXiZ();   //这个是星座

        log("距冬至:" +  day.getCur_dz() + "天");
        log("距夏至:" +  day.getCur_xz() + "天");
        log("距立秋:" +  day.getCur_lq() + "天");
        log("距芒种:" +  day.getCur_mz() + "天");
        log("距小暑:" +  day.getCur_xs() + "天");
    }

    private void testLunar()
    {
        Lunar lunar =  new Lunar();

        //查询某月的月份信息(如:查2017年10月份)
        Month month = lunar.yueLiCalc(2017, (short) 10);
        //年生肖
        log(month.getY() + "年:" +  ShX[month.getShX()] );
        //年天干地支
        log("天干:" + Gan [month.getYearGan()] +  Zhi[month.getYearZhi()]);
        //当月的所有的日信息
        for (int i = 0; i < month.getDays().size(); ++ i)
        {
            Day day = month.getDays().get(i);
            printDay(day);
        }


        //获取某个阳历日的信息(可在信息中查询到阴历,天干等)
        Day day = lunar.getDayBySolar(2018, (short)10, (short)1);
        printDay(day);

        //获取某个阴历日的信息(可在信息中查询到阳历,天干等)
        Day day2 = lunar.getDayByLunar(2018, (short)10, (short)1);
        printDay(day2);

        //获取时辰上的那个天干(例如拿下午13点的时辰干支)
        GZ gz = lunar.getShiGz( day.getLday2().getTg(), (short)13);
        log("获取时辰的干支:" +  Gan[gz.getTg()]  + Zhi[gz.getDz()]);

        //获取一年的信息(干支,生肖,)
        Year year = lunar.getYearCal(2018);
        log("获取年的干支:" +  Gan[year.getYearGan()]  + Zhi[year.getYearZhi()]);
        log("获取年的生肖:" +  ShX[year.getShX()]);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        testLunar();
    }
}

微信交流群

若失效,请邮件至:lifulinghan@aol.com 索要新的二维码

© 著作权归作者所有

共有 人打赏支持
元谷

元谷

粉丝 20
博文 99
码字总数 27437
作品 1
深圳
高级程序员
寿星天文历的 C++ 实现版本 - sxtwl_cpp

项目背景 在公司一次下午茶的偶然的聊天,有位同事说如果有软件能够获取古代农历来研究古人八字就好了。然后,我就找了网上基本上所有和农历相关的的软件,其中包括ubuntu kylin的[优客农历]...

元谷
2017/05/20
0
0
C#下的一个好用的日历库(sxtwl_cpp),支持农历转公历,和公历转农历等功能

sxtwl_cpp是寿星天文历的C++版本实现。支持多种语言的绑定 代码首页 懒人包 懒人包使用方法 1、右链工程中的引用-》添加引用-》浏览-》选中dotnet目录下的sxtwl.net.dll 2、生成解决方案-》找...

元谷
09/21
0
0
小米3日历的日期(阴阳历)选择器源码?

我想实现一款公历农历日期转换的日期选择器控件。自己也做了很久,但是在涉及到闰月的时候公历转农历或者农历转公历就会出现问题。没办法在这里向大家求助了。最好的实现方式是小米3自带的日...

vip_oschina
2015/02/03
970
1
公历农历转换

公历(阳历)农历(阴历)转换,支持时间段从1900-2100 支持各种编程语言 C#,java,Objective-C,php,Python,javascript(nodejs),C/C++,ruby等 支持Mac,Windows,Android,WP多种平台 数据验证 1....

meizhitu
2015/01/16
1K
1
Android NDK开发简介

最近由于项目的需要,使用到了Android的NDK技术,对项目核心算法跨平台的移植。简答而言,就是使用C对原来的算法进行了改进,并集成到原来的app项目里。 从前的项目一直没有使用NDK进行开发的...

zhiweiofli
2013/03/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 入门 - 进阶篇(4)- REST访问(RestTemplate)

经常需要发送一个GET/POST请求到其他系统(REST API),通过JDK自带的HttpURLConnection、Apache HttpClient、Netty 4、OkHTTP 2/3都可以实现。 HttpClient的使用:http://rensanning.iteye.c...

onedotdot
3分钟前
0
0
Wi-Fi也有版本号了!

据Solidot消息,行业组织 Wi-Fi 联盟宣布当前的版本 Wi-Fi 802.11ac 重命名为 Wi-Fi 5,而下一个版本 802.11ax 重命名为 Wi-Fi 6,之前的版本 802.11n 改名为 Wi-Fi 4。 Wi-Fi 标准之前使用单...

linux-tao
4分钟前
0
0
项目经验不丰富、技术不突出的程序员怎么打动面试官?

前言 相信不少的程序员都有过类似的困惑:如果我没有大型的项目经历,也不能靠技术征服面试官,那我要怎么才能给面试官留下一个好印象呢? 按照本人的面试经验来说,面试主要看几点:项目经验...

Mamba1
15分钟前
1
0
MyBatis 源码分析----MyBatis 整体架构概要说明

MyBatis整体架构 MyBatis的整体架构分为三层1:基础支持层,2:核心处理层,3:接口层 1:基础支持层: 1-1反射模块: 该模块对Java 原生的反射进行了良好的封装,提供了更加简洁易用的API ,...

西瓜1994
20分钟前
4
0
如何让 J2Cache 在多种编程语言环境中使用

现在的系统是越来越复杂了,不仅仅是功能复杂,系统结构也非常复杂,而且经常在一个系统里包含几种不同语言编写的子系统。例如用 JavaScript 做前端开发、用 Java/PHP 等等做后端,C/C++/Go ...

红薯
22分钟前
35
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部