20

在 c# 中,我有时间在 12:45:10 的格式 hhmmss 中,例如 124510,我需要知道 TotalSeconds。我使用了 TimeSpan.Parse("12:45:10").ToTalSeconds 但它不采用 hhmmss 格式。有什么好方法可以转换吗?

4

6 回答 6

33

这可能会有所帮助

using System;
using System.Globalization;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime d = DateTime.ParseExact("124510", "hhmmss", CultureInfo.InvariantCulture);

            Console.WriteLine("Total Seconds: " + d.TimeOfDay.TotalSeconds);

            Console.ReadLine();
        }
    }
}

请注意,这不会处理 24HR 时间,要以 24HR 格式解析时间,您应该使用模式HHmmss

于 2009-12-02T16:13:28.747 回答
12

将字符串解析为 DateTime 值,然后减去它的 Date 值以获得 TimeSpan 形式的时间:

DateTime t = DateTime.ParseExact("124510", "HHmmss", CultureInfo.InvariantCulture);
TimeSpan time = t - t.Date;
于 2009-12-02T16:02:18.260 回答
6

您必须确定接收时间格式并将其转换为任何一致的格式。

然后,您可以使用以下代码:

格式:hh:mm:ss(12 小时格式)

DateTime dt = DateTime.ParseExact("10:45:10", "hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
double totalSeconds = dt.TimeOfDay.TotalSeconds;    // Output: 38170.0

格式:HH:mm:ss(24 小时格式)

DateTime dt = DateTime.ParseExact("22:45:10", "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
double totalSeconds = dt.TimeOfDay.TotalSeconds;    // Output: 81910.0

如果格式不匹配,将抛出 FormatException 并显示消息:“字符串未被识别为有效的日期时间。

于 2014-12-18T05:59:23.173 回答
3

您需要转义冒号(或其他分隔符),我不知道为什么它无法处理它们。请参阅MSDN 上的自定义 TimeSpan 格式字符串,以及 Jon 对Why does TimeSpan.ParseExact not work的接受答案。

于 2013-04-28T11:51:42.437 回答
1

如果您还想使用这种格式“01:02:10.055”的毫秒数,那么您可以执行以下操作;

public static double ParseTheTime(string givenTime)
{
var time = DateTime.ParseExact(givenTime, "hh:mm:ss.fff", CultureInfo.InvariantCulture);
return time.TimeOfDay.TotalSeconds;
}

此代码将为您提供相应的秒数。请注意,如果要调整精度点,可以增加“f”的数量。

于 2020-10-21T11:16:51.273 回答
0

如果您可以保证字符串始终为 hhmmss,您可以执行以下操作:

TimeSpan.Parse(
    timeString.SubString(0, 2) + ":" + 
    timeString.Substring(2, 2) + ":" + 
    timeString.Substring(4, 2)))
于 2009-12-02T16:01:39.977 回答