C#의 TimeSpan.FromTicks() 메서드는 지정된 틱(tick) 수에 해당하는 시간 간격을 나타내는 TimeSpan 객체를 반환합니다. .NET에서 1틱은 100나노초에 해당하므로, 1밀리초는 10,000틱, 1초는 10,000,000틱입니다. 아주 정밀한 시간 측정이 필요할 때 유용하게 활용할 수 있습니다.
구문
public static TimeSpan FromTicks(long val);
매개변수 val은 시간을 나타내는 틱 수를 의미하며 long 형식입니다. 음수 값을 전달하면 음의 시간 간격도 표현할 수 있으며, 이 메서드는 정적(static) 메서드이기 때문에 TimeSpan 인스턴스 없이 클래스 이름으로 직접 호출할 수 있습니다.
예제 1: 다양한 단위의 TimeSpan 생성 및 비교
다음 예제에서는 FromTicks()를 포함해 new TimeSpan(), FromHours(), FromMilliseconds(), FromMinutes() 등 여러 방법으로 TimeSpan 객체를 생성하고, TimeSpan.Compare() 메서드로 서로 비교합니다. Compare() 메서드는 첫 번째 인수가 두 번째 인수보다 크면 1, 작으면 -1, 같으면 0을 반환합니다.
using System;
public class Demo {
public static void Main() {
TimeSpan span1 = TimeSpan.FromTicks(18768768);
TimeSpan span2 = new TimeSpan(-9, 45, 50);
TimeSpan span3 = TimeSpan.FromHours(5);
TimeSpan span4 = TimeSpan.FromMilliseconds(10000);
TimeSpan span5 = TimeSpan.FromMinutes(2);
TimeSpan span6 = TimeSpan.FromMinutes(20);
Console.WriteLine("TimeSpan1 = "+span1);
Console.WriteLine("TimeSpan2 = "+span2);
Console.WriteLine("TimeSpan3 = "+span3);
Console.WriteLine("TimeSpan4 = "+span4);
Console.WriteLine("TimeSpan5 = "+span5);
Console.WriteLine("Result (Comparison of span1 and span2) = "+TimeSpan.Compare(span1, span2));
Console.WriteLine("Result (Comparison of span2 and span3) = "+TimeSpan.Compare(span2, span3));
Console.WriteLine("Result (Comparison of span1 and span3) = "+TimeSpan.Compare(span1, span3));
Console.WriteLine("Result (Comparison of span3 and span4) = "+TimeSpan.Compare(span3, span4));
Console.WriteLine("Result (Comparison of span4 and span5) = "+TimeSpan.Compare(span4, span5));
}
}실행 결과
TimeSpan1 = 00:00:01.8768768 TimeSpan2 = -08:14:10 TimeSpan3 = 05:00:00 TimeSpan4 = 00:00:10 TimeSpan5 = 00:02:00 Result (Comparison of span1 and span2) = 1 Result (Comparison of span2 and span3) = -1 Result (Comparison of span1 and span3) = -1 Result (Comparison of span3 and span4) = 1 Result (Comparison of span4 and span5) = -1
예제 2: 최소 단위(1틱)와 다른 단위 비교
두 번째 예제는 TimeSpan이 표현할 수 있는 가장 작은 단위인 1틱부터 1시간까지 다양한 TimeSpan 객체를 생성하여 비교합니다. 특히 TimeSpan.FromTicks(1)과 new TimeSpan(1)은 동일한 값을 나타내므로 비교 결과가 0으로 출력되는 점에 주목하세요.
using System;
public class Demo {
public static void Main() {
TimeSpan span1 = TimeSpan.FromTicks(1);
TimeSpan span2 = new TimeSpan(1);
TimeSpan span3 = TimeSpan.FromHours(1);
TimeSpan span4 = TimeSpan.FromMilliseconds(1);
TimeSpan span5 = TimeSpan.FromMinutes(1);
TimeSpan span6 = TimeSpan.FromMinutes(1);
Console.WriteLine("TimeSpan1 = "+span1);
Console.WriteLine("TimeSpan2 = "+span2);
Console.WriteLine("TimeSpan3 = "+span3);
Console.WriteLine("TimeSpan4 = "+span4);
Console.WriteLine("TimeSpan5 = "+span5);
Console.WriteLine("Result (Comparison of span1 and span2) = "+TimeSpan.Compare(span1, span2));
Console.WriteLine("Result (Comparison of span2 and span3) = "+TimeSpan.Compare(span2, span3));
Console.WriteLine("Result (Comparison of span1 and span3) = "+TimeSpan.Compare(span1, span3));
Console.WriteLine("Result (Comparison of span3 and span4) = "+TimeSpan.Compare(span3, span4));
Console.WriteLine("Result (Comparison of span4 and span5) = "+TimeSpan.Compare(span4, span5));
}
}실행 결과
TimeSpan1 = 00:00:00.0000001 TimeSpan2 = 00:00:00.0000001 TimeSpan3 = 01:00:00 TimeSpan4 = 00:00:00.0010000 TimeSpan5 = 00:01:00 Result (Comparison of span1 and span2) = 0 Result (Comparison of span2 and span3) = -1 Result (Comparison of span1 and span3) = -1 Result (Comparison of span3 and span4) = 1 Result (Comparison of span4 and span5) = -1
핵심 정리
- FromTicks()는 틱 단위의 long 값을 받아 해당 시간 간격의 TimeSpan을 반환합니다.
- 1틱 = 100나노초이며, 따라서 10,000,000틱 = 1초입니다.
- 음수 틱 값을 전달하면 음의 시간 간격도 표현할 수 있습니다.
- TimeSpan.Compare(a, b)는 a가 b보다 크면 1, 작으면 -1, 같으면 0을 반환합니다.