根本原因是各环境对 locale 的支持程度和默认解析不一致,需显式指定 options、设置系统 locale 或绑定 Locale 实例,避免依赖默认行为。
JavaScript 中 toLocaleString() 的格式控制不生效?
常见现象是调用 new date().tolocalestring('zh-cn') 后,时间还是英文星期或 12 小时制,尤其在 safari 或旧版 chrome 上更明显。根本原因不是函数没用,而是浏览器对区域设置(locale)的支持程度和默认选项不一致。
实操建议:
- 显式传入
options对象,不要只靠 locale 字符串——toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour12: false, hour: '2-digit', minute: '2-digit' }) - 避免依赖系统默认:不同操作系统对同一 locale 的解释可能不同(比如 macOS 和 Windows 对
'en-US'下的 AM/PM 符号处理有差异) - 注意
hour12: true/false必须和hour同时指定,否则部分引擎会忽略它
Python 的 strftime() 在中文环境输出乱码或英文月份?
典型错误是直接写 dt.strftime('%Y年%m月%d日 %H:%M'),结果「年」「月」「日」正常,但 %B(全称月份)或 %A(星期)仍是英文。这是因为 strftime() 不读取 locale 的翻译表,只按 C 库规则格式化。
实操建议:
- 用
locale.setlocale(locale.LC_TIME, 'zh_CN.UTF-8')设置后再调用strftime(),但注意:Windows 要用'Chinese_China.936'或'chs',且必须确保系统装了对应语言包 - 更可靠的做法是手动映射:
CHN_MONTHS = ['一月', '二月', ...],然后用CHN_MONTHS[dt.month - 1]拼接 - 如果用 pandas,
pd.to_datetime(...).dt.strftime(...)同样受 locale 影响,不能绕过上述限制
Django 模板里 {{ value|date:"Y年m月d日 H:i" }} 不显示中文?
现象是日期字段渲染后「年」「月」「日」等字面量正常,但月份、星期名仍是英文,或者整个过滤器报错 TemplateSyntaxError: Invalid format string。问题出在 Django 的本地化开关和格式字符串语法上。
实操建议:
- 确认
USE_L10N = True且LANGUAGE_CODE = 'zh-hans'已启用(注意不是'zh-CN') - Django 的
date过滤器不支持中文字符混写格式,"Y年m月d日"是非法的——必须用标准格式符 +DATE_FORMAT配置项间接实现 - 推荐做法:在
settings.py中定义DATE_FORMAT = 'Y年n月j日',模板中只写{{ value|date }};如需动态格式,改用{{ value|date:"Y" }}年{{ value|date:"n" }}月...
Java DateTimeFormatter.ofPattern() 怎么让中文星期和月份正确显示?
直接写 DateTimeFormatter.ofPattern("yyyy年MM月dd日 E HH:mm"),结果 E 输出的是 "Mon" 而非「周一」,甚至抛出 UnsupportedTemporalTypeException。这是因为 pattern 字符本身不携带语言信息,必须绑定 Locale 实例。
实操建议:
- 必须用带 locale 的构造方式:
DateTimeFormatter.ofPattern("yyyy年MM月dd日 E HH:mm", Locale.CHINESE) - 注意
Locale.CHINESE和Locale.SIMPLIFIED_CHINESE行为略有不同:后者更倾向简体字+大陆习惯(如「星期一」vs「週一」),但某些 JDK 版本下前者兼容性更好 - 避免使用
DateTimeFormatter.BASIC_ISO_DATE等预设 formatter,它们不接受 locale 参数,无法本地化
事情说清了就结束。真正麻烦的从来不是「怎么写」,而是不同运行环境对同一个 locale 字符串的实际解析能力——比如 Android WebView 可能根本不认识 'zh-Hans',而 Node.js 的 Intl API 在低版本里压根不支持自定义 pattern。

















