You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中获取当前区域设置的一周第一天?

如何在Bash中获取当前区域设置下一周的第一天(周日或周一)?

部分区域设置对应的一周第一天示例:

  • 周日:en_US、pt_BR(巴西)
  • 周一:en_GB、es_AR(阿根廷)
  • 周六:ar_AE(阿拉伯联合酋长国)

我希望找到适用于类UNIX系统的跨平台解决方案。我了解可以通过glibc组件中的locale(1)命令获取当前区域设置信息,但相关文档(locale(5))让我有些困惑,或许存在比使用glibc更好的方案。


可行解决方案

1. 解析locale的星期名称列表(跨平台首选)

locale day会返回当前区域设置下的星期全称,以分号分隔,第一个元素就是一周的第一天:

# 获取一周第一天的名称
first_weekday=$(locale day | cut -d';' -f1)
echo "当前区域一周第一天:$first_weekday"

这个方法在Linux、BSD(包括macOS)等绝大多数类UNIX系统上都能正常工作,无需依赖特定工具版本。

2. 利用cal命令提取日历表头

cal命令的输出会遵循当前区域的星期起始规则,表头第一列就是一周第一天:

# 提取cal输出的表头第一个星期名称
cal | head -n 1 | awk '{print $1}'

优点是直观易理解,缺点是部分小众系统的cal输出格式可能有差异,需要测试适配。

3. 解析locale的配置参数(glibc系统专用)

对于使用glibc的Linux系统,可以直接查询LC_TIME中的first_weekday参数,获取数字表示(0通常对应周日,1对应周一,以此类推):

# 获取一周第一天的数字标识
first_weekday_num=$(locale -k LC_TIME | grep '^first_weekday' | awk -F= '{print $2}' | tr -d ' ')
# 映射为星期名称(示例)
case $first_weekday_num in
    0) echo "周日";;
    1) echo "周一";;
    6) echo "周六";;
esac

注意:这个方法仅适用于glibc系统,BSD系系统不支持locale -k参数。


内容的提问来源于stack exchange,提问作者myrdd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:10:02