c# fractional second가 있는 TimeSpan 출력하기

.네트의 시간은 초 아래에 일곱 자리의 시간이 더 있는데 이걸 fractional second라 하며 hh:mm:ss.fffffff로 표기한다. millisecond는 1/1,000초이므로 적어도 논리적으로는 이거보다 더 정밀한 값이다. 그러나 사실적으로는 그렇게까지 정밀하게 작동하지는 않는다.

TimeSpan을 출력할 때 이 fractional second가 문제될 수 있다. 아래는 TimeSpan을 출력하는 기본적인 예제다.

TimeSpan TimeSpan1 = Convert.ToDateTime("10:00:00.2") - Convert.ToDateTime("09:00:00.1");

private void button1_Click(object sender, EventArgs e)
{
    button1.Text = TimeSpan1.ToString(); // 01:00:00:1000000
}

그런데 초까지만 출력해야 할 때도 있지만 아래의 예제는 작동하지 않는다.

private void button2_Click(object sender, EventArgs e)
{
    button2.Text = TimeSpan1.ToString("hh:mm:ss"); // error
}

아래와 같이 custom format을 이용해야 한다.

private void button3_Click(object sender, EventArgs e)
{
    button3.Text = TimeSpan1.ToString(@"hh\:mm\:ss"); // 01:00:00
}

버버팀을 이용하지 않고 아래와 같이 해도 된다.

private void button3_Click(object sender, EventArgs e)
{
    button3.Text = TimeSpan1.ToString("hh\\:mm\\:ss"); // 01:00:00
}