一款安卓日历,仿miui,钉钉,华为的日历,万年历、365、周日历,月日历,月视图、周视图滑动切换,农历,节气,Andriod Calendar , MIUI Calendar,小米日历
以《钦定协纪辨方书》为核心的python3 农历
历法是基于人们生产活动需要,依据太阳、月亮等天象而制订计算时间的方法,根据月亮的周期变化所订立的历法称为阴历,根据太阳在不同季节的位置的周期变化所订立的历法称为阳历。 因为月亮的周期变化较短,观测方式较为简单,所以阴历在世界各地普遍比阳历更早出现,比如我国的上古六历:黄帝历、夏历、殷历、周历、鲁历、颛顼历,古希腊的希腊历等。大约公元前104年至84年,以农耕文化为主的中国西汉,汉武帝刘彻责成邓平、唐都、落下闳等人编写了《太初历》,中国农历经历了第一次重大改革,引入二十四节气正式成为阴阳合历,历法在中国也成为了一门较为独立的科学技术。与之同一时期,公元前46年,罗马统帅凯撒大帝(Gaius Julius Caesar)在希腊数学家兼天文学家索西琴尼的帮助下制订《儒略历》(Julian calendar)取代旧罗马历法,《儒略历》以回归年为基本单位,是一部纯粹的阳历,并在1582年发展成格里历延续至今,即目前在使用的公历。 南北朝时期数学家祖冲之在历法中引入了岁差,将朔望月长度定为29.5309日,将木星公转周期为11.858年(今测为11.862年),对农历进行了第二次改革。清朝汤若望(德国)推出《时宪历》,废除了圭表测影法,把全年分成二十四份,正式采用以太阳在黄道上位置为标准的定气,中国农历最后一次大改革结束并沿用至今。 由于计算机在我国起步较晚,阴阳合历计算方式更为复杂,需要掌握历法、数学、天文学等多学科知识,许多人对中国农历阴阳合历复杂算法不甚了解,在很长一段时间里,多数研发工程师在计算中国农历时都是用“通用寿星公式”[Y*D+C]-L进行节气计算。“通用寿星公式”属于经验公式,实际上是通过寻找一个拟合值C,来不断趋近实际的农历二十四节气,在计算结果不正确时,又套用了“某某年需要加1日,某某年需要减1日”等“特殊情况”校正值,存在农历算法不准情况,且“通用寿星公式”只输出二十四节气内容有限,无法满足用户对农历更为丰富的文化需求。 为符合Python解释型语言的本质,与跨平台脚本、快速开发应用的特性[2],为传达精确计算及Python“胶水”语言的特性,让更多人方便使用,我们将设计一个依赖库少,农历算法清晰,二十四节气精准、功能丰富、基于Python的无数据库农历算法项目,
table_calendar Highly customizable, feature-packed calendar widget for Flutter
https://github.com/apptreesoftware/flutter_calendar/blob/master/lib/flutter_calendar.dart
从0开始写一个Flutter日历App,可以通过以下几个步骤规划功能、代码架构和模块。我们将分阶段规划,先分析基本功能,然后设计代码结构并给出示例代码。
一、基本功能分析
- 日历视图:展示一个可滚动的月视图或周视图,用户可以查看不同日期。
- 日期选择:用户能够选择某一天,查看详细信息。
- 事件管理:用户可以在某个日期上添加、删除、编辑事件。
- 事件提醒:用户可以设置事件的提醒,支持日历通知。
- 同步功能:可以和外部日历(如Google日历)同步。
二、代码架构设计
- UI模块:
- 首页:展示日历视图。
- 事件详情页:用户点击日期后查看详细信息。
- 事件编辑页:用户创建或编辑事件。
- 数据模块:
- 事件数据存储:可以使用本地存储(如SQLite)来保存事件。
- 事件通知:可以使用
flutter_local_notifications
来实现通知提醒功能。
- 状态管理模块:
- 使用
Provider
或者Riverpod
来管理状态,保持UI和数据的同步。
- 使用
三、代码实现
1. 创建Flutter项目
首先,创建一个新的Flutter项目:
flutter create calendar_app
cd calendar_app
2. 添加依赖
在pubspec.yaml
中添加以下依赖:
dependencies:
flutter:
sdk: flutter
provider: ^6.0.0
sqflite: ^2.0.0
flutter_local_notifications: ^9.1.4
intl: ^0.17.0
3. 数据存储(使用SQLite)
在lib/models
文件夹中,创建一个event.dart
文件来定义事件模型:
class Event {
final int id;
final String title;
final String description;
final DateTime dateTime;
Event({
required this.id, required this.title, required this.description, required this.dateTime});
Map<String, dynamic> toMap() {
return {
'id': id,
'title': title,
'description': description,
'dateTime': dateTime.toIso8601String(),
};
}
factory Event.fromMap(Map<String, dynamic> map) {
return Event(
id: map['id'],
title: map['title'],
description: map['description'],
dateTime: DateTime.parse(map