Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# DateTimeOffset.AddTicks() 메서드 완벽 정리: 문법과 예제

C#의 DateTimeOffset.AddTicks() 메서드는 현재 인스턴스가 나타내는 날짜·시간 값에 지정한 수만큼의 틱(tick)을 더하는 데 사용됩니다. 틱은 .NET에서 시간을 측정하는 가장 작은 단위로, 1틱은 100나노초(ns)에 해당합니다.

문법(Syntax)

메서드의 기본 문법은 다음과 같습니다.

public DateTimeOffset AddTicks (long val);

매개변수 val에는 더할 틱 수를 지정합니다. 값을 빼고 싶다면 음수를 전달하면 됩니다. 반환값은 틱이 더해진 새로운 DateTimeOffset 객체이며, 원본 인스턴스는 변경되지 않습니다.

시간 간격별 틱 수

틱 단위는 매우 작기 때문에 실제 개발에서는 초, 분, 일 등의 시간 간격을 틱으로 환산해 사용하는 경우가 많습니다. 주요 시간 간격별 틱 수는 다음과 같습니다.

시간 간격틱 수
1초10,000,000
1분600,000,000
1시간36,000,000,000
1일864,000,000,000
1주6,048,000,000,000
1개월해당 월의 일수에 따라 다름
1년(평년)315,360,000,000,000
1년(윤년)316,224,000,000,000

예제 1: 틱 더하기

다음은 AddTicks() 메서드를 사용해 3초(30,000,000틱)를 더하는 예제입니다.

using System;
public class Demo {
   public static void Main() {
      DateTimeOffset dateTimeOffset = new DateTimeOffset(2019, 11, 11, 8, 20, 10, new TimeSpan(-5, 0, 0));
      Console.WriteLine("틱 추가 전 DateTimeOffset = {0}", dateTimeOffset);
      // 3초 = 30,000,000틱
      DateTimeOffset res = dateTimeOffset.AddTicks(30000000);
      Console.WriteLine("틱 추가 후 DateTimeOffset = {0}", res);
   }
}

실행 결과

틱 추가 전 DateTimeOffset = 11/11/2019 8:20:10 AM -05:00
틱 추가 후 DateTimeOffset = 11/11/2019 8:20:13 AM -05:00

실행 결과를 보면 시간이 정확히 3초 증가해 8:20:13으로 출력된 것을 확인할 수 있습니다.

예제 2: 틱 빼기

음수 값을 전달하면 틱을 뺄 수도 있습니다. 아래 예제는 2초(20,000,000틱)를 빼는 코드입니다.

using System;
public class Demo {
   public static void Main() {
      DateTimeOffset dateTimeOffset = new DateTimeOffset(2019, 11, 11, 8, 20, 10, new TimeSpan(-5, 0, 0));
      Console.WriteLine("틱 차감 전 DateTimeOffset = {0}", dateTimeOffset);
      // 2초 = 20,000,000틱
      DateTimeOffset res = dateTimeOffset.AddTicks(-20000000);
      Console.WriteLine("틱 차감 후 DateTimeOffset = {0}", res);
   }
}

실행 결과

틱 차감 전 DateTimeOffset = 11/11/2019 8:20:10 AM -05:00
틱 차감 후 DateTimeOffset = 11/11/2019 8:20:08 AM -05:00

정리

DateTimeOffset.AddTicks() 메서드는 나노초 수준의 정밀한 시간 연산이 필요할 때 유용합니다. 1틱 = 100나노초라는 규칙만 기억하면 초, 분, 시간 단위의 연산도 손쉽게 처리할 수 있으며, 음수 값을 사용하면 시간을 뺄 수도 있습니다. 또한 이 메서드는 기존 객체를 수정하지 않고 새로운 DateTimeOffset 객체를 반환한다는 점도 함께 기억해 두면 좋습니다.