赛博朋克2077存档修改终极指南:从新手到专家的完整解决方案
2026/4/20 15:37:31
yyyy-MM-dd HH:mm:ss中的大写MM和HH是 Java 日期格式化中的约定,原因如下:
// 大写的 M 表示月份 (Month)// 小写的 m 表示分钟 (minute)SimpleDateFormatsdf1=newSimpleDateFormat("MM");// 月份,如 12SimpleDateFormatsdf2=newSimpleDateFormat("mm");// 分钟,如 30// 如果混淆会出问题SimpleDateFormaterrorFormat=newSimpleDateFormat("mm-dd");// 这会被解析为 "分钟-天",而不是 "月-日"// 大写的 H 表示 24小时制 (0-23)// 小写的 h 表示 12小时制 (1-12)SimpleDateFormatsdf1=newSimpleDateFormat("HH:mm");// 24小时制,如 14:30SimpleDateFormatsdf2=newSimpleDateFormat("hh:mm a");// 12小时制,如 02:30 PM// C语言中的时间格式化strftime(buffer,80,"%Y-%m-%d %H:%M:%S",timeinfo);// %Y: 年份,%m: 月份,%d: 日期,%H: 24小时,%M: 分钟,%S: 秒// Java 1.0 开始就采用了类似的格式// 保持与 C/Unix 和其他语言的一致性| 字符 | 含义 | 示例 | 说明 |
|---|---|---|---|
| y | 年份 Year | yyyy → 2024 | 小写 |
| M | 月份 Month | MM → 12 | 大写,区别于分钟 |
| d | 日期 Day | dd → 25 | 小写 |
| H | 小时 Hour(24h) | HH → 14 | 大写,24小时制 |
| h | 小时 Hour(12h) | hh → 02 | 小写,12小时制 |
| m | 分钟 Minute | mm → 30 | 小写 |
| s | 秒 Second | ss → 45 | 小写 |
| S | 毫秒 | SSS → 789 | 大写 |
| a | 上午/下午 | a → PM | 小写 |
importjava.text.SimpleDateFormat;importjava.util.Date;publicclassDateFormatExample{publicstaticvoidmain(String[]args){Datenow=newDate();// 正确:月份用大写 MM,24小时制用大写 HHSimpleDateFormatcorrectFormat=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("正确格式: "+correctFormat.format(now));// 输出: 2024-12-17 14:30:45// 错误示例1:月份用小写 mm(会被解析为分钟)SimpleDateFormaterror1=newSimpleDateFormat("yyyy-mm-dd HH:mm:ss");System.out.println("错误格式1: "+error1.format(now));// 输出可能: 2024-30-17 14:30:45 (月份变成了分钟数)// 错误示例2:小时用小写 hh(12小时制,没有AM/PM会出错)SimpleDateFormaterror2=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");System.out.println("错误格式2: "+error2.format(now));// 输出可能: 2024-12-17 02:30:45 (下午2点变成了2点)// 12小时制的正确写法SimpleDateFormattwelveHourFormat=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss a");System.out.println("12小时制: "+twelveHourFormat.format(now));// 输出: 2024-12-17 02:30:45 PM}}// 假设都用小写,会有歧义"yyyy-mm-dd hh:mm:ss"// 这到底是 "年-分钟-日 小时:分钟:秒" 还是 "年-月-日 小时:分钟:秒"?// 无法区分月份和分钟!// 使用大小写区分后"yyyy-MM-dd HH:mm:ss"// 明确:年-月-日 24小时:分钟:秒"yyyy-mm-dd hh:mm:ss"// 明确:年-分钟-日 12小时:分钟:秒// 还有其他大小写区分SimpleDateFormatsdf1=newSimpleDateFormat("DDD");// 一年中的第几天SimpleDateFormatsdf2=newSimpleDateFormat("ddd");// 星期几的缩写SimpleDateFormatsdf3=newSimpleDateFormat("EEE");// 星期几的全称SimpleDateFormatsdf4=newSimpleDateFormat("eee");// 本地化的星期几