如何在DateTime中实现每24小时自动加一天?含手动推进场景
嘿,看起来你已经把「按Enter键推进时间」的基础功能搭起来了,就差解决「累计推进24小时同步更新日期」的问题对吧?其实不用手动去算累计时长,C#的DateTime类型本身就自带日期进位的功能,咱们来调整一下你的代码:
首先先把你当前的代码(补全未写完的部分)贴出来,方便对比:
var time = new DateTime(2025, 4, 15, 12, 00, 0); string currentDate = time.ToString("dd/MM/yyyy"); string currentTime = time.ToString("HH:mm"); int timeAdd = 4; Console.WriteLine("Press 'Enter' to advance..."); ConsoleKeyInfo userInput = Console.ReadKey(); if (userInput.Key == ConsoleKey.Enter) { currentTime = time.AddHours(timeAdd).ToString("HH:mm"); // 这里你可能没处理日期更新,而且只执行一次 }
核心问题&解决方案
你的代码里有几个小问题需要调整:
currentDate和currentTime是初始时间的字符串快照,更新time对象后不会自动同步- 只处理了一次Enter按键,没法多次推进时间
- 其实不用手动判断是否累计24小时——
DateTime.AddHours()方法会自动帮你处理日期进位!比如从4月15日22点加4小时,会直接变成4月16日2点。
修改后的完整代码
// 初始化初始时间 var time = new DateTime(2025, 4, 15, 12, 00, 0); int timeAdd = 4; // 每次推进4小时 Console.WriteLine("Press 'Enter' to advance time (press any other key to exit)..."); // 用循环支持多次按Enter推进 while (true) { ConsoleKeyInfo userInput = Console.ReadKey(); if (userInput.Key == ConsoleKey.Enter) { // 直接更新time对象,DateTime自动处理日期变化 time = time.AddHours(timeAdd); // 从更新后的time对象获取最新的日期和时间字符串 string currentDate = time.ToString("dd/MM/yyyy"); string currentTime = time.ToString("HH:mm"); // 输出更新后的结果 Console.WriteLine($"\n✅ Updated: {currentDate} {currentTime}"); Console.WriteLine("Press 'Enter' to advance again..."); } else { Console.WriteLine("\n👋 Exiting program..."); break; } }
关键改动说明
- 用循环实现多次推进:
while(true)让程序可以持续响应Enter按键,直到按其他键退出 - 依赖DateTime的自动进位:
time.AddHours(timeAdd)会直接修改time对象的日期和时间,完全不用你手动计算是否跨天 - 每次更新后重新生成日期时间字符串:避免用初始的快照字符串,确保显示的是最新的时间状态
这样你每次按Enter,时间会推进4小时,一旦累计满24小时(比如按6次Enter),日期就会自动跳转到下一天,完美解决你的需求~
内容的提问来源于stack exchange,提问作者AcedPI
相关产品推荐
相关产品推荐

