-4

如何在 C# 中解析以下时间?

15:31:58:13943730921

最后 11 位数字是多少?

4

4 回答 4

3

一些天真的事情是:

var time = "15:31:58:13943730921";
var str = time.Split(':');

var res = new TimeSpan(int.Parse(str[0]), int.Parse(str[1]), int.Parse(str[2])).Add(TimeSpan.FromTicks((long.Parse(str[3]) + 5000) / 10000));

请注意,如果秒数的位数发生变化,它将不起作用。

啊......它是一个TimeSpan,而不是一个DateTime可能:-)

+ 5000) / 10000是四舍五入到最近的Tick.

一个更完整的解决方案,可以处理任意数量的数字:

var time = "15:31:58:13943730921";
var str = time.Split(':');

// Used for the rounding
int carryover = 0;

if (str[3].Length < 7)
{
    str[3] = str[3] + new string('0', 7 - str[3].Length);
}
else if (str[3].Length > 7)
{
    char eight = str[3][7];

    if (eight >= 5)
    {
        carryover = 1;
    }

    str[3] = str[3].Remove(7);
}

var res = new TimeSpan(int.Parse(str[0]), int.Parse(str[1]), int.Parse(str[2])).Add(TimeSpan.FromTicks(long.Parse(str[3]) + carryover));

请注意,TimeSpan构造函数不支持小时/分钟/秒 + 刻度,因此我们必须以不同的方式处理它(通过使用.Add)。其他解决方案显然是可能的。

于 2013-09-02T15:06:49.563 回答
0

这就是我所做的。

    internal string GetTime(string line)
    {
        // ...

        string tmp = time.Substring(0, 12);

        time = DateTime.ParseExact(tmp, "HH:mm:ss:fff", CultureInfo.CurrentUICulture).Ticks.ToString();

        return time;
    }
于 2013-09-02T15:19:38.590 回答
0

如果您想正确舍入为整数和刻度,使用 .NET 4.0 及更高版本,您可以执行以下操作:

string time = "15:31:58:13943730921";
var ts = TimeSpan.ParseExact(time.Remove(16), "h':'mm':'ss':'fffffff", null);
if (time[16] >= '5')
    ts += new TimeSpan(1L);  // add one tick for better rounding
Console.WriteLine(ts);

16是我们必须丢弃的第一个字符的字符串中的索引。

于 2013-09-02T15:49:33.137 回答
-1

可能看起来是一个明显的答案..但问题不太清楚。

DataTime time = DateTime.Now;
string myTime = time.ToShortTimeString();
myTime = myTime.SubString(0, 7);
于 2013-09-02T15:07:00.090 回答