Calendar获得当前时间之前或之后的一周或者一天或者其他任意天数的时间点

日常开发中经常会需要计算出当前时间的一周之前的Date,或者当前之后的时间点,

Calendar类是java官方推荐使用的日期计算的类,直接代码说明:

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


public class CalendarTest {

	public static void main(String[] args) {
		
		//当前时间
		Date now = new Date();
		
		System.out.println("现在时间:"+now.toLocaleString());
		
		Calendar calendar = new GregorianCalendar();
		
		//将Date设置到Calendar中
		calendar.setTime(now);
		
		/**
		 * Calendar中有set方法和get方法
		 * get方法将根据传入的参数值反回相应的值
		 * Calendar.DATE反回的是天数
		 * Calendar.MONTH返回的是月
		 */
		//获得当前时间之前一周时间点
		calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 7);
		
		System.out.println("一周之前时间:"+calendar.getTime().toLocaleString());
		
		//1个月零一周以前的时间
		calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
		
		System.out.println("一个月零一周以前的时间"+calendar.getTime().toLocaleString());
		
	}
}

后台打印出数据:

现在时间:2015-4-7 17:20:06
一周之前时间:2015-3-31 17:20:06
一个月零一周以前的时间2015-3-3 17:20:06

大家可能疑惑为什么最后时间输出的为2015-3-3,3月31号退回一个月应该是2月31号,但是2月是没有31号的,那么jdk就在31号的基础上减去2月有的天数,今天有28天,所以就是3月3号,

再比如说如果从12月31号退回一个月,11月也没有31号,11月一共30天,所以就退回到了12月1号。

LVGL(Light and Versatile Graphics Library)是一个开源的嵌入式图形库,提供创建嵌入式GUI所需的各种控件。要在LVGL中显示一个一周的日历表,你需要做以下几步: 1. 初始化LVGL库,并设置好显示和输入设备。 2. 创建一个表格控件(lv_table),用于显示日期和星期。 3. 在表格中填充当前周的日期和对应的星期名称。 4. 创建两个按钮控件,分别对应左右按键,用于切换显示不同的周。 5. 编写事件处理函数,响应按钮击事件,更新表格显示的日期范围。 6. 在事件处理函数中,重新计算并填充表格,以显示新的周的日期和星期。 实现这样一个日历表的基本思路是这样的,具体的代码实现会根据你的硬件和LVGL版本有所不同。需要注意的是,LVGL可能没有现成的日历控件,因此需要手动构建日历界面,并处理日期逻辑。 以下是一个简化的伪代码示例,用于说明如何构建这样的日历界面: ```c // 初始化LVGL lv_init(); // ...初始化显示和输入设备... // 创建表格控件 lv_obj_t *calendar_table = lv_table_create(lv_scr_act(), NULL); lv_obj_set_size(calendar_table, 200, 200); // 根据实际需要设置大小 lv_table_set_col_cnt(calendar_table, 7); // 一周7天 lv_table_set_row_cnt(calendar_table, 2); // 两行显示一周 // 填充标题行 for (uint16_t i = 0; i < 7; i++) { lv_table_set_cell_value(calendar_table, 0, i, days_of_week[i]); // days_of_week数组包含了星期的名称 } // 填充日期行 for (uint16_t i = 0; i < 7; i++) { // 假设start_date是一个已经设置好的日期,可以是当前日期或者任意日期 char date_str[16]; struct tm *timeinfo = localtime(&start_date); strftime(date_str, sizeof(date_str), "%m/%d", timeinfo); // 将计算出的日期字符串填入表格 lv_table_set_cell_value(calendar_table, 1, i, date_str); } // 创建左右切换按钮 lv_obj_t *btn_left = lv_btn_create(lv_scr_act(), NULL); lv_obj_set_size(btn_left, 50, 30); lv_obj_align(btn_left, NULL, LV_ALIGN_IN_LEFT_MID, 10, 0); lv_obj_t *btn_right = lv_btn_create(lv_scr_act(), NULL); lv_obj_set_size(btn_right, 50, 30); lv_obj_align(btn_right, NULL, LV_ALIGN_IN_RIGHT_MID, -10, 0); // 设置按钮的击事件处理 lv_obj_set_event_cb(btn_left, event_handler_left_click); lv_obj_set_event_cb(btn_right, event_handler_right_click); // 事件处理函数示例 void event_handler_left_click(lv_obj_t *obj, lv_event_t event) { // 减少start_date的天数,更新日历 // ... } void event_handler_right_click(lv_obj_t *obj, lv_event_t event) { // 增加start_date的天数,更新日历 // ... } ``` 上述代码只是一个简单的框架,具体的日期逻辑和屏幕布局需要根据你的实际需求进行调整。确保你已经熟悉了LVGL的API,并且在实际的嵌入式设备上进行了适当的测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值