如何将DateTime转为时分字符串再转回,并输出指定时分格式?
问题分析与解决方案
你的问题核心在于DateTime类型本身必然包含日期和时间两部分,不存在仅存储时分的DateTime实例。当你用DateTime.Parse(v)解析"HH:mm"格式的字符串时,.NET会自动补充默认日期(通常是当前系统日期,也就是你看到的12/19/2022),而Console.WriteLine(Time)默认会输出完整的DateTime格式,因此带出了多余的日期信息。
针对你的需求,提供以下几种解决方案:
方案1:直接输出时分字符串(无需转回DateTime)
如果最终目的只是显示时分,完全不需要将字符串转回DateTime,直接输出之前生成的格式化字符串即可:
DateTime date = new DateTime(2008, 6, 6, 13, 34, 6); string v = date.ToString("HH:mm"); Console.WriteLine(v); // 输出:13:34
方案2:转回DateTime后按需格式化输出
如果必须将字符串转回DateTime(比如后续有时间逻辑处理),只需在输出时重新指定"HH:mm"格式即可:
DateTime date = new DateTime(2008, 6, 6, 13, 34, 6); string v = date.ToString("HH:mm"); DateTime time = DateTime.Parse(v); Console.WriteLine(time.ToString("HH:mm")); // 输出:13:34
方案3:保留原日期的日期部分
如果希望转回的DateTime使用原数据的年月日(而非默认的当前日期),可以结合原日期构造新实例:
DateTime date = new DateTime(2008, 6, 6, 13, 34, 6); string v = date.ToString("HH:mm"); // 先将时分字符串解析为TimeSpan TimeSpan timeSpan = TimeSpan.Parse(v); // 用原日期的年月日 + 解析得到的时分构造新DateTime DateTime newDateTime = new DateTime(date.Year, date.Month, date.Day, timeSpan.Hours, timeSpan.Minutes, 0); // 按需输出格式 Console.WriteLine(newDateTime.ToString("HH:mm")); // 输出:13:34 // 若输出完整格式,日期会保留原数据的2008-06-06 Console.WriteLine(newDateTime); // 输出:6/6/2008 1:34:00 PM
内容的提问来源于stack exchange,提问作者W25
相关产品推荐
相关产品推荐

