C# DateTime 时间操作常用方法与格式化指南

蓝鲸
蓝鲸
发布时间:2026-10-15| 3人浏览过
原创

本文总结了 C# 中 System.DateTime 类的核心用法,包括如何获取当前时间的各个组成部分、利用 ToString 方法进行多种格式的字符串转换,以及通过 AddDays 和 AddMonths 实现周、月等时间段的精确计算,并提供了详细的格式符对照表。

C# DateTime 基础获取与实例化

在 C# 开发中,处理时间最核心的类是 System.DateTime。通过实例化对象或直接调用静态属性,可以获取系统当前的完整时间信息。

第1步:实例化 DateTime 对象

目的:创建一个时间对象以便后续读取属性或进行赋值。

动作:使用 new System.DateTime() 或直接引用 DateTime.Now。

// 实例化一个 datetime 对象
System.DateTime currentTime = new System.DateTime();

// 或者直接获取当前系统完整时间
currentTime = System.DateTime.Now;

第2步:提取时间各组成部分

目的:从完整时间中提取年、月、日、时、分、秒等独立数值,用于业务逻辑判断或展示。

入口:DateTime.Now 实例的对应属性。

代码示例:

int 年 = currentTime.Year;        // 当前年份
int 月 = currentTime.Month;       // 当前月份 (1-12)
int 日 = currentTime.Day;         // 当前天数 (1-31)
int 时 = currentTime.Hour;        // 当前小时 (0-23)
int 分 = currentTime.Minute;      // 当前分钟 (0-59)
int 秒 = currentTime.Second;      // 当前秒 (0-59)
int 毫秒 = currentTime.Millisecond; // 当前毫秒 (0-999)

时间格式字符串转换

ToString() 方法是将 DateTime 转换为字符串的最常用手段。C# 提供了内置的预设格式(如 "d", "D", "f")以及灵活的自定义格式。

第3步:使用内置标准格式输出

目的:快速生成符合常见阅读习惯的日期时间字符串。

重要参数:格式字符串如 d, D, t, T, f, F 等。

代码示例:

// 1. 获取完整的日期和时间 (长日期 + 短时间)
string fullTime = DateTime.Now.ToString();

// 2. 只显示长日期 (例如: 2023年10月24日 星期二)
string longDate = DateTime.Now.ToLongDateString();

// 3. 只显示短日期 (例如: 2023-10-24)
string shortDate = DateTime.Now.ToShortDateString();

// 4. 中文日期格式 (不显示秒)
string chineseTimeNoSec = DateTime.Now.ToString("f");

// 5. 中文年月格式
string chineseYearMonth = DateTime.Now.ToString("y");

// 6. 中文月日格式
string chineseMonthDay = DateTime.Now.ToString("m");

// 7. 特定短日期格式: yyyy-M-d
string yMdFormat = DateTime.Now.ToString("d"); 
// 注意: "d" 通常等同于 ToShortDateString(),具体取决于区域设置

// 8. 中文时分格式
string chineseTimeHourMin = DateTime.Now.ToString("t");

第4步:自定义格式字符串

目的:当内置格式不满足需求时,构建自定义日期时间模板。

动作:在 ToString("...") 中使用组合模式字符,区分大小写。

关键模式说明:

  • yyyy: 四位数的年份,yy 为两位。
  • MM: 两位数月份(01-12),M 为一位数。
  • dd: 两位数日期(01-31),d 为一位数。
  • HH: 24小时制(00-23),hh 为12小时制。

复杂时间区间计算

在处理日程、报表或统计时,经常需要获取“本周”、“上周”或“本月”的首尾日期。这可以通过 AddDays 和 AddMonths 配合 DayOfWeek 枚举来实现。

第5步:计算本周、下周及上周的时间范围

前提条件:默认一周从周日开始,周六结束(根据系统区域设置可能不同)。

动作:计算当前星期几的偏移量,加上相应天数。

代码示例:

// --- 本周 ---
// 本周第一天 (周日): 当前时间 - 今天星期几的天数
string weekStart = DateTime.Now.AddDays(-(int)DateTime.Now.DayOfWeek).ToShortDateString();
// 本周最后一天 (周六): 本周第一天 + 6天
string weekEnd = DateTime.Now.AddDays(6 - (int)DateTime.Now.DayOfWeek).ToShortDateString();

// --- 下周 ---
// 下周第一天: 本周第一天 + 7天
string nextWeekStart = DateTime.Now.AddDays(7 - (int)DateTime.Now.DayOfWeek).ToShortDateString();
// 下周最后一天
string nextWeekEnd = DateTime.Now.AddDays(13 - (int)DateTime.Now.DayOfWeek).ToShortDateString();

// --- 上周 ---
// 上周第一天: 本周第一天 - 7天
string lastWeekStart = DateTime.Now.AddDays(-7 - (int)DateTime.Now.DayOfWeek).ToShortDateString();
// 上周最后一天
string lastWeekEnd = DateTime.Now.AddDays(6 - (int)DateTime.Now.DayOfWeek - 7).ToShortDateString();

第6步:计算本月的首尾日期

目的:获取当月第一日和最后一日,常用于月度数据统计查询。

动作:构造当月1号,然后利用 AddMonths 跳转下月再减1天得到月末。

代码示例:

// 本月第一天
string monthFirstDay = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1";
// 更推荐的写法,避免字符串拼接潜在风险:
DateTime firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);

// 本月最后一天
// 思路: 下个月1号 -> 往前推1天
DateTime lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddDays(-1);

DateTime 格式符详细参考表

以下为 ToString() 支持的标准预定义格式字符及其含义:

格式字符 关联属性/说明
d ShortDatePattern (短日期)
D LongDatePattern (长日期)
f 完整日期和时间(长日期+短时间)
F FullDateTimePattern (长日期+长时间)
g 常规(短日期+短时间)
G 常规(短日期+长时间)
m, M MonthDayPattern (月日)
r, R RFC1123Pattern (Internet 标准格式)
s SortableDateTimePattern (ISO 8601 本地时间)
t ShortTimePattern (短时间)
T LongTimePattern (长时间)
u UniversalSortableDateTimePattern (通用 sortable 时间)
U 使用通用时间(GMT)的完整日期和时间
y, Y YearMonthPattern (年月)

以下是可组合的自定义格式模式(注意区分大小写):

格式字符 关联属性/说明
d 月中的某一天,无前导零 (1-31)
dd 月中的某一天,有前导零 (01-31)
ddd 周中某天的缩写名称 (如 Mon)
dddd 周中某天的完整名称 (如 Monday)
M 月份数字,无前导零 (1-12)
MM 月份数字,有前导零 (01-12)
MMM 月份的缩写名称 (如 Oct)
MMMM 月份的完整名称 (如 October)
y 不含纪元的年份 (<10 无前导零)
yy 不含纪元的年份 (<10 有前导零)
yyyy 四位数的年份 (2023)
gg 时期或纪元字符串
h 12小时制小时,无前导零 (1-12)
hh 12小时制小时,有前导零 (01-12)
H 24小时制小时,无前导零 (0-23)
HH 24小时制小时,有前导零 (00-23)
以上就是关于 C# DateTime 时间获取、格式化及计算方法的详细内容,更多关于 C# 开发实战的资料请关注本站其它相关文章!
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。