Visual Studio C# -将字符串解析为仅包含小时:分钟:秒的DateTime

798qvoo8  于 2023-03-09  发布在  C#
关注(0)|答案(6)|浏览(157)

我接收的是整数用户输入的小时、分钟和秒。
现在,当我尝试使用DateTime.Parse和DateTime.TryParse AND Convert.ToDateTime时,它们都返回正确的小时/分钟/秒;但是,它也返回日期(年、月、日等)。

string a = this.hours.ToString() + ":" + this.minutes.ToString() + ":" + this.seconds.ToString();

        this.alarm = new DateTime();
        this.alarm = DateTime.ParseExact(a, "H:m:s", null);

假设小时是05,分钟是21,秒是50。“a”将是05:21:50。我期望“alarm”是05:21:50。然而,它实际上是(可能是):

11/23/10 05:21:50

有什么办法能让它正常工作吗?先谢了。

2izufjch

2izufjch1#

DateTime示例将始终包含一些日期信息。
如果您试图只表示一天中的时间,则应该使用TimeSpan(TimeSpan表示从午夜开始的跨度......或一天中的时间。您还将注意到DateTime.TimeOfDay属性也做同样的事情)。
代码类似于:

var timeOfDay = TimeSpan.ParseExact(a, "H:m:s", null);
yeotifhr

yeotifhr2#

DateTime总是保存time * 和 * date。如果你想要一个只保存时间的类,你可以创建你自己的struct来处理它。但是在一般情况下,没有必要这样做,因为你可以简单地忽略DateTime结构的date部分,例如:

string a = "05:21:50";

DateTime alarm = new DateTime();
alarm = DateTime.ParseExact(a, "H:m:s", null);
Console.WriteLine(alarm.ToString("H:m:s"));
Console.WriteLine(alarm.Hour);
Console.WriteLine(alarm.Minute);
Console.WriteLine(alarm.Second);
0mkxixxg

0mkxixxg4#

您不能这样做,因为按照设计,DateTime表示Date 表示时间。
.NET Framework中没有用于表示时间的类型,但最接近的类型是TimeSpan。如果时间语义对您很重要,请考虑将其 Package 在您自己的TimeOfDay类型中。

eiee3dmh

eiee3dmh5#

新答案:
从. NET 6开始,存在一个内置的TimeOnly结构,它的构造函数需要数小时、数分钟和数秒

var timeOfDay = new TimeOnly(hours, minutes, seconds);

旧答案:
TimeSpan有一个构造函数,它接受小时、分钟和秒作为参数,所以你的代码应该是:

var timeOfDay = new TimeSpan(hours, minutes, seconds);
6pp0gazn

6pp0gazn6#

正如前面提到的,DateTime对象总是包含一个Date部分,但最简单的方法就是忽略它,然后,在打印它时,可以使用以下语法:

alarm.ToShortTimeString();

相关问题