Java 8 DateTimeFormatter 踩坑

1. 问题描述

本月是 2019 年的第一个月,除了迎接新年之外同样也迎来了跨年带来的关于时间参数的 bug。

废话不多说,进入正题。之前写了一个任务调度系统,支持以周为粒度进行任务的调度。针对任务的每次运行都会产生一个批次号,一般以 任务名_<年份><周数> 的格式编号(比如 job_201850 ),但是在 2018 年 12 月 31 日却发现了自然周的序号发生了跳跃。

2. 分析出问题的代码

查看了一下代码,问题出在 DateTime 格式化上,原来的 DateTimeFormatter 的定义如下:

  DateTimeFormatter.ofPattern("yyyyww")

预想的是 yyyy 代表年,ww 代表自然周,对于 2018 年 12 月 31 日原本预计得到的结果是 201853,但是此处 ww 得到的结果竟然是 01。

百思不得其解之下上网查了一下,发现原来错的不是 ww,而是 yyyy

一般来说 yyyy 是和自然年的月份、日期搭配的,对于和自然周的搭配是要用 YYYY 的。代码如下:

  @Test
  public void testForWeek() {
      DateTimeFormatter rightFormatter = DateTimeFormatter.ofPattern("YYYYww");
      DateTimeFormatter wrongFormatter = DateTimeFormatter.ofPattern("yyyyww");
  
      LocalDateTime now = LocalDateTime.of(2019, 1, 7, 0, 30, 0);
      System.out.println(now);
      String right = rightFormatter.format(now);
      String wrong = wrongFormatter.format(now);
      System.out.println("right = " + right);
      System.out.println("wrong = " + wrong);
  
      now = LocalDateTime.of(2018, 12, 31, 0, 30, 0);
      System.out.println(now);
      right = rightFormatter.format(now);
      wrong = wrongFormatter.format(now);
      System.out.println("right = " + right);
      System.out.println("wrong = " + wrong);
  }

输出结果:

  2019-01-07T00:30
  right = 201902
  wrong = 201902
  2018-12-31T00:30
  right = 201901
  wrong = 201801

也就是说 2018 年 12 月 31 日实际上算是 2019 年的第一周,这也算刷新了我的认知!

虎皮尖椒酿肉

  • 配料表:

    1. 尖椒 500 g(大约四个比较大的尖椒)

    2. 绞肉(七分瘦,三分肥)350 g

    3. 姜片 2 片 切末

    4. 生抽 15 mL

    5. 老抽 7 mL

    6. 鸡蛋 1 个

    7. 马铃薯淀粉 10 g

    8. 芝麻油 5 mL

    9. 葱花 一小把(缺失)

    10. 蒜 2 瓣 切碎

    11. 生抽 10 mL

    12. 醋 20 mL

    13. 糖 10 g

    14. 水 50 mL

    15. 盐 2 g

    16. 芡汁(5 g 水 + 5 g 淀粉)

  • 注意点:

    1. 材料 2~ 9 搅拌均匀拌成肉馅。

    2. 尖椒切段去籽填充肉馅。

    3. 小火将尖椒一面煎至虎皮状,翻面盖上锅盖继续煎至虎皮状。

    4. 放入蒜蓉炒香,加入 11 ~ 14,盖上锅盖中火煮开大约再煮 5 分钟。

    5. 加入芡汁收汁。

  • 经验总结:

    1. 肉馅放入的酱油量基本可以,有足够的咸味。

    2. 调味汁还是有淀粉的腥味,这个要想想办法。

    3. 调味汁有醋的味道不是很喜欢,可以尝试一下其他配方。

  • 参考资料:

    1. 虎皮尖椒酿肉

卤金钱腱

  • 配料表

    1. 7 fresh 金钱腱一个

    2. 台湾信牌卤料包一个

    3. 红茶包 1 个

    4. 黄色多晶冰糖 50 g

    5. 生抽 100 mL

    6. 老抽 50 mL

    7. 葱姜

    8. 料酒

  • 注意点

    1. 金钱腱抹上盐,放入冰箱腌制 1~2 天。

    2. 金钱腱、葱姜、料酒加入冷水飞水,大约一个小时,中间不断捞出血沫做牛肉高汤。

    3. 捞出金钱腱用沸水再次冲洗。

    4. 在铸铁锅(22cm)中放入金钱腱,加入牛肉高汤,如果水不够一次加足开水。

    5. 加入冰糖、生抽、老抽、卤料表和茶包。

    6. 大火烧开,小火炖两个小时。

    7. 将金钱腱放入密封袋,冷藏一晚。

  • 经验总结

    1. 注意红茶的茶叶包一定要结实的否则卤水只能用一次

  • 参考资料

    1. 五香卤牛肉简易做法,附一般卤水保养方法

    2. 真羡慕你们,年纪轻轻就养了一锅老卤