日历app 开发调研

lunar是一个支持阳历、阴历、佛历和道历的日历工具库

一款安卓日历,仿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

dart官方教程

https://github.com/apptreesoftware/flutter_calendar/blob/master/lib/flutter_calendar.dart

从0开始写一个Flutter日历App,可以通过以下几个步骤规划功能、代码架构和模块。我们将分阶段规划,先分析基本功能,然后设计代码结构并给出示例代码。

一、基本功能分析

  1. 日历视图:展示一个可滚动的月视图或周视图,用户可以查看不同日期。
  2. 日期选择:用户能够选择某一天,查看详细信息。
  3. 事件管理:用户可以在某个日期上添加、删除、编辑事件。
  4. 事件提醒:用户可以设置事件的提醒,支持日历通知。
  5. 同步功能:可以和外部日历(如Google日历)同步。

二、代码架构设计

  1. UI模块
    • 首页:展示日历视图。
    • 事件详情页:用户点击日期后查看详细信息。
    • 事件编辑页:用户创建或编辑事件。
  2. 数据模块
    • 事件数据存储:可以使用本地存储(如SQLite)来保存事件。
    • 事件通知:可以使用flutter_local_notifications来实现通知提醒功能。
  3. 状态管理模块
    • 使用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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值