.NET Ticks Converter

.NET Ticks → Unix 타임스탬프 변환기

.NET Ticks을(를) Unix 시간으로 변환합니다. 정확한 공식과 큰 값 지원. 출력: 초, 밀리초, ISO 8601, 가독 형식.

0001-01-01 이후의 100-ns 간격

현재 시간 — .NET DateTime.Ticks
Unix 타임스탬프(초)

.NET 틱이란?

.NET에서 DateTime.Ticks와 TimeSpan.Ticks는 시간을 100나노초 단위로 측정합니다. DateTime 틱 수는 선행 그레고리력의 0001년 1월 1일 00:00:00 이후 경과한 100나노초 간격의 수입니다.

  • epoch: 0001-01-01 00:00:00
  • 해상도: 100나노초 틱(초당 10,000,000)
  • 현재 값은 약 6.4 × 10^17
  • C#: DateTime.UtcNow.Ticks, DateTimeOffset.UtcNow.Ticks

.NET 틱을 Unix 타임스탬프로 변환하는 법

0001-01-01과 1970-01-01 사이에는 62,135,596,800초가 있습니다. 틱을 10,000,000으로 나눠 서기 1년 이후의 초를 구한 뒤 그 오프셋을 뺍니다.

  • Unix seconds = Ticks / 10000000 − 62135596800
  • Unix milliseconds = Ticks / 10000 − 62135596800000
  • 예: 638355968000000000 → 1700000000 → 2023-11-14 22:13:20 UTC
  • C#에서: new DateTimeOffset(dt).ToUnixTimeSeconds()가 대신 해 줌

C# 코드와 엣지 케이스

최신 .NET은 DateTimeOffset.ToUnixTimeSeconds()와 ToUnixTimeMilliseconds(), 역방향용 DateTimeOffset.FromUnixTimeSeconds()를 제공합니다. 직렬화된 데이터와 상호 운용할 때만 틱을 직접 사용하세요. DateTime.Ticks는 DateTimeKind를 무시하므로 항상 먼저 UTC로 정규화하세요.

  • C#: var unixSeconds = new DateTimeOffset(dt.ToUniversalTime()).ToUnixTimeSeconds();
  • C#: var dt = DateTimeOffset.FromUnixTimeMilliseconds(ms).UtcDateTime;
  • 틱 0 = 0001-01-01; DateTime.MaxValue.Ticks = 3155378975999999999
  • 값이 JavaScript 안전 정수를 초과하므로 이 변환기는 BigInt를 사용

관련 타임스탬프 형식 변환기

라이브러리 및 직렬화 참고

틱은 오래된 .NET 직렬화 형식과 JSON 관례에 나타납니다. 다음에 유의하세요:

  • 레거시 Microsoft JSON 날짜: "/Date(1700000000000+0000)/"는 밀리초를 감쌈(틱이 아님)
  • DateTimeOffset.UnixEpoch은 최신 .NET의 표준 영점
  • DateTime.MaxValue.Ticks = 3155378975999999999; 이렇게 큰 값은 거의 확실히 '없음' 센티넬을 나타냄
  • TimeSpan.Ticks는 같은 단위지만 기간으로 측정됨; DateTime 틱에서 TimeSpan 틱을 무턱대고 빼지 말 것
  • Newtonsoft.Json과 System.Text.Json 둘 다 기본값이 ISO 8601 — 선택할 수 있다면 원시 틱보다 이를 선호

FAQ

1초는 몇 틱인가?
정확히 10,000,000틱 — 각 틱은 100나노초입니다.
.NET 틱과 Windows FILETIME의 차이는?
둘 다 100나노초 단위를 쓰지만, .NET 틱은 0001-01-01부터, FILETIME은 1601-01-01부터 셉니다. 둘은 504,911,232,000,000,000틱의 고정 오프셋만큼 다릅니다.
C#의 DateTime에서 Unix 시간을 얻으려면?
new DateTimeOffset(dateTime.ToUniversalTime()).ToUnixTimeSeconds() 또는 .ToUnixTimeMilliseconds()를 사용하세요.