Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android的CalendarView控件使用及日期进行农历转换

Android的CalendarView控件使用及日期进行农历转换

作者头像
Vaccae
发布于 2019-07-24 03:05:28
发布于 2019-07-24 03:05:28
3.2K0
举报
文章被收录于专栏:微卡智享微卡智享

前言

我们在做一些日历或是对一些重要日期记录时有时会用到农历,Android里面网上可以看到一些农历的相关类,我们这里也是在度娘里找到的直接借用一下,主要是来介绍怎么使用。

视频演示效果

代码演示

我们新建一个工程起名为LunarDemo

然后在MainActivity的同级创建一个java的类,起名为Lunar,然后这个类里面用就我们的核心代码,代码在最后会贴出

然后我们先修改布局文件activity_main.xml

首先我们把布局的layout改为LinnerLayout,并设置为垂直布局(orientation="vertical"),然后增加一个CalendarView的日历控件,一个TextView的文本框和一个Button的按钮。

实现思路就是用日期控件点击选取日期,然后按获取农历按钮在文本框中显示当前农历日期,并弹出个Toast提示框显示当前是什么属相年。

然后我们回到MainActivity.java来看看实现方法

用一个Calendar初始化日历,然后在calendarview日历控件的里面设置onSelectedDayChange事件用来修改选中的日期。通过按钮的时候调用我们刚才建好的Lunar类,传入Calendar的参数,获取当前的农日即可完成了。


生成效果


核心类

public class Lunar { private int year; private int month; private int day; private boolean leap; final static String chineseNumber[] = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"}; 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)); } public String getLunarMonthString() { // TODO Auto-generated method stub return null; } public Lunar(Calendar cal) { @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 (leap ? "闰" : "") + chineseNumber[month - 1] + "月" + getChinaDayString(day); } }

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
更可信的人脸识别,腾讯优图TFace正式开源!
继神经网络推理框架 ncnn、TNN,动作检测算法 DBG,通用目标检测算法 OSD,人脸检测算法 DSFD、人脸属性算法 FAN等众多优秀的框架、算法开源后,腾讯优图实验室又有一项人脸识别算法研究项目——TFace正式拥抱开源啦!
优图实验室
2021/06/23
2.4K0
更可信的人脸识别,腾讯优图TFace正式开源!
腾讯优图TFace发布新版本,新增人脸安全模块
TFace是由腾讯优图实验室研发的可信人脸算法研究项目,重点关注人脸识别、人脸安全、人脸质量等技术领域,通过开源自研的方法,方便研究人员快速复现我们的工作。自开源以来,本项目在业界获得了广泛关注,最近TFace发布了新版本,在优化了原有人脸识别模块的同时,新增了人脸安全模块。
优图实验室
2022/04/20
1.5K0
腾讯优图TFace发布新版本,新增人脸安全模块
不得不赞!京东开源FaceX-Zoo,一站式人脸识别研究平台
近日,京东AI研究院开源了FaceX-Zoo,一个专为人脸识别而生的开源库,论文 FaceX-Zoo: A PyTorch Toolbox for Face Recognition 详述了其特点,不仅方便比较研究不同的方法,还针对实际应用开发了特定功能(如人脸戴口罩、Shallow Face Learning 等)。非常值得关注!
CV君
2021/02/05
8160
不得不赞!京东开源FaceX-Zoo,一站式人脸识别研究平台
人脸识别技术综述,出自OPPO研究院
现如今人脸识别应用已经大规模走进我们的的生活,但人脸识别技术的研究仍然是计算机视觉的热点,还有哪些待解的问题?从应用的角度哪些新技术更值得关注?
CV君
2023/02/15
1.4K0
人脸识别技术综述,出自OPPO研究院
京东开源PyTorch人脸识别工具包FaceX-Zoo:覆盖最强模型,支持训练跑分
近年来,基于深度学习的人脸识别技术取得了重要进展。但是人脸识别模型的实际部署和深入研究都需要相应的公众支持。例如生产级人脸表示网络需要模块化的训练机制,以配合不同 SOTA 骨干网络、训练监督主题再到现实世界人脸识别需求。至于性能分析和比较,基于多个基准的大量模型也需要一个标准和自动化的评估工具。此外,人们希望能够出现一种以整体流水线形式部署的人脸识别公共基础。
机器之心
2021/02/23
9110
京东开源PyTorch人脸识别工具包FaceX-Zoo:覆盖最强模型,支持训练跑分
2020人脸识别最新进展综述,参考文献近400篇 | 附下载
本文全面介绍了端到端深度学习人脸识别技术,包括人脸检测,人脸预处理和人脸 表征等方向,详细介绍了最新的算法设计,评估指标,数据集,性能比较等。
AI算法与图像处理
2021/01/05
3.5K0
腾讯AI Lab两大算法刷新人脸识别与检测纪录,秉承「基础研究+落地应用」之路
AI 科技评论按:12 月 18 日,腾讯 AI Lab 宣布,其研发的人脸算法 Face R-FCN 和 Face CNN 分别在人脸检测平台 WIDER FACE 与人脸识别平台 MegaFace 的多项测评中斩获冠军。获悉这一消息后,AI 科技评论与腾讯 AI Lab 计算机视觉中心总监刘威博士进行了交流。 Face R-FCN 算法为针对人脸检测问题而设计,而 Face CNN 则着眼于解决人脸识别问题。据刘威博士介绍,目前 Face R-FCN 的部分技术细节已在 arXiv 上公布,Face C
AI科技评论
2018/03/14
1K0
腾讯AI Lab两大算法刷新人脸识别与检测纪录,秉承「基础研究+落地应用」之路
ICCV 2021 | 基于生成数据的人脸识别
本文是对发表于计算机视觉领域顶级会议ICCV 2021的论文“SynFace: Face Recognition with Synthetic Data” (基于生成数据的人脸识别)的解读。
AI科技评论
2021/09/16
6950
腾讯AI Lab刷新人脸检测与识别两大测评国际记录,技术日调用超六亿
本文第一部分介绍在WIDER FACE全部测试中斩获第一的人脸检测算法Face R-FCN,第二部分介绍在MegaFace Challenge 2所有测试斩获第一的人脸识别算法Face CNN,第三部分介绍这些人脸技术的应用方向与前景。 腾讯AI Lab在国际最大、最难的人脸检测平台WIDER FACE与最热门权威的人脸识别平台MegaFace的多项评测指标中荣膺榜首,刷新行业纪录,展现其在计算机视觉领域中,特别是人脸技术上的强劲实力。 研究上,目前腾讯AI Lab已通过arXiv平台发表论文公开部分技术
腾讯高校合作
2018/03/21
1.4K0
腾讯AI Lab刷新人脸检测与识别两大测评国际记录,技术日调用超六亿
新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法
人脸识别是最近几年计算机视觉领域取得长足进步的领域,这得益于不断进步的深度学习强大的模型拟合能力和有标注的大型数据集的建立,已经出现了用于人脸识别的有标注的百万量级的数据集。
CV君
2019/12/27
1.5K0
新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法
曾经最强性能的人脸检测算法(Wider Face Dataset)
今天我们不说计算机视觉基础知识,接下来说说AAAI2019一篇比较新颖的Paper,其是中科院自动化所和京东AI研究院联合的结果,在Wider Face数据集中达到了较高的水准,比arxiv2019_VIM-FD的更好一些。今天要说的就是“Improved SRN”,现在开始一起学习吧!
计算机视觉研究院
2022/01/25
6270
曾经最强性能的人脸检测算法(Wider Face Dataset)
face.evoLVe:高性能人脸识别开源库,内附高能模型
目前人脸识别开源项目众多,但真正能方便快捷拿来就用、性能指标业界领先的开源库并不多,而最近刚刚开源的face.evoLVe绝对是不容忽视的力量。
CV君
2019/12/27
2.1K0
CVPR 2024 | 腾讯优图实验室20篇论文入选,含图文多模态大模型、高分辨视觉分割、跨模态生成、人脸识别等研究方向
近日,CVPR 2024 (IEEE Conference on Computer Vision and Pattern Recognition) IEEE国际计算机视觉与模式识别会议公布了论文录用结果。
CV君
2024/04/25
2.3K0
CVPR 2024 | 腾讯优图实验室20篇论文入选,含图文多模态大模型、高分辨视觉分割、跨模态生成、人脸识别等研究方向
今日 Paper | 高效骨干搜索;学习扩充;最小人脸检测器;​DEPARA等
论文名称:Efficient Backbone Search for Scene Text Recognition
AI科技评论
2020/04/07
9310
今日 Paper | 高效骨干搜索;学习扩充;最小人脸检测器;​DEPARA等
港中文开源基于PyTorch的多任务人脸识别框架
今天跟大家分享一款新晋开源的出自香港中文大学MMLab实验室的人脸识别库,其最大特点是支持人脸多任务训练,方便使用PyTorch进行人脸识别的训练、评估、特征提取。
CV君
2019/12/27
1.8K0
今日 Paper | CVPR 2020 论文推荐:Social-STGCNN;无偏场景图生成;深度人脸识别;4D 关联图等
CVPR 2020 | Social-STGCNN:一种用于行人轨迹预测的社会时空图卷积神经网络
AI科技评论
2020/03/26
8350
腾讯优图开源项目全景图!
腾讯优图属于国内工业界CV领域实验室的第一梯队,其不仅服务腾讯内部线上产品,也开源了多个前沿研究和工程项目,本文盘点优图实验室开源的所有项目,其中最“火”的三个工程是『NCNN』、『人脸检测-DSFD』、『目标检测-OSD』。
3D视觉工坊
2020/12/11
1.3K0
腾讯优图开源项目全景图!
腾讯优图CVPR 2022丨无监督预训练下的视频场景分割
对于视频场景分割任务,如何更好地在无标注长视频上进行自监督预训练?如何运用视频特征对该任务进行建模?腾讯优图实验室、深圳大学、KAUST等机构的研究成果入选今年CVPR 2022会议。
公众号-arXiv每日学术速递
2022/05/23
1.7K0
腾讯优图CVPR 2022丨无监督预训练下的视频场景分割
多模态内容理解算法框架项目 Lichee 正式开源,为微服务开源社区贡献力量
导语|Lichee 是一个多模态内容理解算法框架项目,其中包含数据增强、预训练引擎、常见模型以及推理加速等模块。由腾讯看点内容算法研发中心研发。并于 2021 年在腾讯看点、腾讯视频、内容管线、QQ等业务场景均有落地,并平均减少标注样本量 40%+。经过多次实践迭代,可以大幅缩短信息流内容理解需求的研发周期提升人效。此外,为QQ浏览器2021AI算法大赛-多模态视频相似度赛道提供baseline模型及代码。现将Lichee对外开源,为微服务开源社区贡献力量。 PART ONE 主要设计目标 1. 缩短
腾源会
2021/10/26
7630
【难度越大,优势越大】腾讯AI Lab刷新人脸识别与人脸检测国际记录
编辑:闻菲 【新智元导读】日前,腾讯AI Lab在国际最大、最难的人脸检测平台WIDER FACE与热门人脸识别平台MegaFace多项评测指标获得第一,刷新了行业纪录。研究人员表示,通过有针对的优化,这些模型都可以投入实用,并且与竞赛中表现出的性能基本齐平。 人脸检测是让机器找到图像视频中所有人脸并精准定位其位置信息,是人脸识别的前提和基础。由于视角、光照、遮挡、姿态、年龄变化等复杂因素的干扰与影响,真实场景下的人脸检测与识别问题一直极具挑战。优秀的人脸技术在政务、金融、安防等领域都具有极高应用价值。 日
新智元
2018/03/20
1.1K0
【难度越大,优势越大】腾讯AI Lab刷新人脸识别与人脸检测国际记录
推荐阅读
更可信的人脸识别,腾讯优图TFace正式开源!
2.4K0
腾讯优图TFace发布新版本,新增人脸安全模块
1.5K0
不得不赞!京东开源FaceX-Zoo,一站式人脸识别研究平台
8160
人脸识别技术综述,出自OPPO研究院
1.4K0
京东开源PyTorch人脸识别工具包FaceX-Zoo:覆盖最强模型,支持训练跑分
9110
2020人脸识别最新进展综述,参考文献近400篇 | 附下载
3.5K0
腾讯AI Lab两大算法刷新人脸识别与检测纪录,秉承「基础研究+落地应用」之路
1K0
ICCV 2021 | 基于生成数据的人脸识别
6950
腾讯AI Lab刷新人脸检测与识别两大测评国际记录,技术日调用超六亿
1.4K0
新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法
1.5K0
曾经最强性能的人脸检测算法(Wider Face Dataset)
6270
face.evoLVe:高性能人脸识别开源库,内附高能模型
2.1K0
CVPR 2024 | 腾讯优图实验室20篇论文入选,含图文多模态大模型、高分辨视觉分割、跨模态生成、人脸识别等研究方向
2.3K0
今日 Paper | 高效骨干搜索;学习扩充;最小人脸检测器;​DEPARA等
9310
港中文开源基于PyTorch的多任务人脸识别框架
1.8K0
今日 Paper | CVPR 2020 论文推荐:Social-STGCNN;无偏场景图生成;深度人脸识别;4D 关联图等
8350
腾讯优图开源项目全景图!
1.3K0
腾讯优图CVPR 2022丨无监督预训练下的视频场景分割
1.7K0
多模态内容理解算法框架项目 Lichee 正式开源,为微服务开源社区贡献力量
7630
【难度越大,优势越大】腾讯AI Lab刷新人脸识别与人脸检测国际记录
1.1K0
相关推荐
更可信的人脸识别,腾讯优图TFace正式开源!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档