故事的六要素,就是时间,地点,人物,事件,观点,感悟。
铺排好这六要素,就是构成故事的基本原理。
如果想讲好故事,可以从这6要素开始。
时间控件感觉比较简单的,但是会有些容易出问题的地方,记录下自己一些经验:
1. 和mysql交互时指定微秒
系统之间接口回调,失败重试时,会在表里记录下一个重试时间,每个5分钟检查下,有没法的就重发。因为存的时候和取的时候都没有加微秒,测试服是正常,但是到线上就出问题了,存的时候指定微秒,取的时候也指定即可。
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.SECOND, 0);
//需要制定微秒 要不可能会查不到 测试服没问题 但是到了线上sql就加上
calendar1.set(Calendar.MILLISECOND, 0);
Date time = calendar1.getTime();
image.png
2. 计算指定日期是年的第几周
自然周:周跨年时,根据这个周的周四是哪一年的来判断是属于哪一年。
static int dateWeek(Date date) {
LocalDateTime localDateTime = date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY, 4);
return localDateTime.get(weekFields.weekOfWeekBasedYear());
}
3. 计算用户生日还差几天
库里存的dateTime
,本来想用sql来实现,感觉写的比较费劲,还是较少mysql的一些压力吧,java判断。
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
Calendar cToday = Calendar.getInstance(); // 存今天
Calendar cBirth = Calendar.getInstance(); // 存生日
cBirth.setTime(myFormatter.parse(birthday)); // 设置生日
cBirth.set(Calendar.YEAR, cToday.get(Calendar.YEAR)); // 修改为本年
if (cBirth.get(Calendar.DAY_OF_YEAR) < cToday.get(Calendar.DAY_OF_YEAR)) {
// 生日已经过了,要算明年的了
days = cToday.getActualMaximum(Calendar.DAY_OF_YEAR) - cToday.get(Calendar.DAY_OF_YEAR);
days += cBirth.get(Calendar.DAY_OF_YEAR);
} else {
// 生日还没过
days = cBirth.get(Calendar.DAY_OF_YEAR) - cToday.get(Calendar.DAY_OF_YEAR);
}
4. update字段
对于更新记录时就要更新的时间,可以用timeStamp
字段来存储,勾选修改就更新为当前时间。sql和代码不用管这个字段。
网友评论