商城首页欢迎来到中国正版软件门户

您的位置:首页 >C#获取星期几及格式化方法

C#获取星期几及格式化方法

  发布于2026-04-10 阅读(0)

扫一扫,手机访问

DateTime.DayOfWeek 返回的是 DayOfWeek 枚举值,本质为整数(0=Sunday…6=Saturday),非中文;ToString() 默认输出英文名,需用 ToString("dddd", new CultureInfo("zh-CN")) 或查表映射(如 string[] Weekdays = {"周日","周一",...})才能稳定输出中文星期。

DateTime.DayOfWeek 返回的是数字还是中文?

返回的是 DayOfWeek 枚举值,本质是整数(0=Sunday,1=Monday…6=Saturday),不是字符串也不是中文。直接 .ToString() 会输出英文名(如 "Monday"),不是你想要的“周一”或“星期一”。

  • 别用 DateTime.Now.DayOfWeek.ToString() 直接当中文用,它不会自动本地化
  • 如果项目启用了多语言,ToString() 的结果取决于当前线程的 CultureInfo,但默认仍是英文
  • 想稳定输出中文,得手动映射或用格式化字符串

用 ToString("dddd") 能否显示“星期一”?

可以,但依赖当前线程的 CultureInfo。默认情况下,.NET 运行时使用系统区域设置,中文 Windows 通常能输出“星期一”,但服务器部署时可能变成英文。

  • DateTime.Now.ToString("dddd") → 在中文环境输出 "星期一",英文环境输出 "Monday"
  • 显式指定文化信息更可靠:DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("zh-CN"))
  • 注意:ASP.NET Core 默认请求线程文化是 en-US,不设 UseRequestLocalization 或不配置 SupportedCultures 就容易翻车

想固定输出“周X”(如“周一”)该怎么做?

最稳的方式是查表映射,避开文化依赖。枚举值确定、范围小,查数组比走本地化更轻量、可控。

  • 定义静态只读数组:private static readonly string[] Weekdays = { "周日", "周一", "周二", "周三", "周四", "周五", "周六" };
  • 用法:Weekdays[(int)DateTime.Now.DayOfWeek] → 确保始终输出“周一”
  • 避免用 switchif-else,数组索引快且不易漏分支
  • 如果需要“星期一”而非“周一”,改数组内容即可,逻辑不变

ToString("d") 和 "dddd" 容易混淆的点

"d" 是短日期格式(如 "2024/5/20"),和星期完全无关;"dddd" 才是完整星期名称。很多人搜“星期几”却试 ToString("d"),结果一脸懵。

  • "d" → 日期,不是 day of week
  • "ddd" → 缩写星期(如 "Mon""周一",仍受文化影响)
  • "dddd" → 完整星期名称(如 "Monday" / "星期一"
  • 错误示例:DateTime.Now.ToString("d") 返回 "2024/5/20",跟星期几毫无关系
文化设置这层容易被当成“理所当然”,但实际部署时线程文化经常和开发机不一致,查表映射虽然多写一行,反而省去排查环境问题的时间。
本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注