解析日期时间格式:15:31:58:13943730921

时间:2013-09-02 14:57:38

标签: c# datetime

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

15:31:58:13943730921

最后11位是什么?

4 个答案:

答案 0 :(得分: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)。其他解决方案显然是可能的。

答案 1 :(得分: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;
    }

答案 2 :(得分: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是我们必须扔掉的第一个字符的字符串中的索引。

答案 3 :(得分:-1)

似乎是一个明显的答案..但问题不太清楚。

DataTime time = DateTime.Now;
string myTime = time.ToShortTimeString();
myTime = myTime.SubString(0, 7);