# 러스트용 Datetime 라이브러리 Jiff

> Clean Markdown view of GeekNews topic #15968. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15968](https://news.hada.io/topic?id=15968)
- GeekNews Markdown: [https://news.hada.io/topic/15968.md](https://news.hada.io/topic/15968.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-07-23T09:43:17+09:00
- Updated: 2024-07-23T09:43:17+09:00
- Original source: [github.com/BurntSushi](https://github.com/BurntSushi/jiff)
- Points: 2
- Comments: 1

## Topic Body

- Jiff는 Rust용 날짜 및 시간 라이브러리로, 사용자가 쉽게 성공적인 결과를 얻을 수 있도록 설계됨  
- 고수준의 날짜 및 시간 프리미티브를 제공하여 오용이 어렵고 성능이 우수함  
- Time Zone Database와의 자동 통합, DST 인식 산술 및 반올림, 포맷팅 및 파싱 기능 제공  
- Serde 지원 등 다양한 기능 포함  
- JavaScript의 Temporal에서 많은 영감을 받음  
- MIT 또는 UNLICENSE 이중 라이선스  
  
##### 향후 계획  
  
- Jiff API를 개선하고 약 1년 동안 주기적으로 변경 사항을 릴리스할 계획  
- 1년 후 API가 안정되면 Jiff 1.0을 릴리스하고 장기간 API를 유지할 계획  
- 다른 사람들이 Jiff를 신뢰하고 사용할 수 있도록 하기 위함  
  
##### 성능  
  
- Jiff의 가장 중요한 설계 목표는 사용자가 잘못된 작업을 하기 어렵게 만드는 것  
- 두 번째 목표는 성능  
- 성능은 합리적이지만 개선할 여지가 있음  
- 벤치마크는 `bench` 디렉토리에서 확인 가능  
  
##### 플랫폼 지원  
  
- 시간대 지원과 관련된 플랫폼 지원 문제  
- IANA 시간대 식별자의 시간대 전환을 어떻게 결정할지  
- 현재 시스템의 기본 시간대를 어떻게 결정할지  
- Unix 시스템에서는 `/usr/share/zoneinfo`에서 시간대 전환 데이터 검색  
- Windows에서는 컴파일된 라이브러리에 시간대 데이터베이스 포함  
- 시스템 시간대 검색은 Unix에서는 `/etc/localtime`, Windows에서는 `GetDynamicTimeZoneInformation` 사용  
  
##### 의존성  
  
- Jiff는 Unix에서 의존성이 없음  
- 새로운 의존성을 추가하는 데 매우 보수적  
- 플랫폼과 상호작용하기 위해 필요한 경우나 상호 운용성을 위해 필요한 경우에만 의존성 추가  
  
  
##### GN⁺의 정리  
  
- Jiff는 Rust용 고수준 날짜 및 시간 라이브러리로, 사용자가 쉽게 오용하지 않도록 설계됨  
- Time Zone Database와의 통합, DST 인식 산술 및 포맷팅 기능 등 다양한 기능 제공  
- JavaScript의 Temporal에서 영감을 받아 설계됨  
- 향후 1년 동안 API를 개선하고 안정된 1.0 버전을 릴리스할 계획  
- 성능은 합리적이지만 개선할 여지가 있으며, 플랫폼 지원은 Unix와 Windows에서 잘 작동함

## Comments



### Comment 27466

- Author: neo
- Created: 2024-07-23T09:43:17+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41031037) 
- ToSpan 문법이 다소 어색하게 느껴짐
  - `let span = 5.days().hours(8).minutes(1);` 문법이 첫 번째 숫자가 앞에 나오고 나머지는 함수 인수로 나오는 것이 이상함
  - `let span = Span::new().days(5).hours(8).minutes(1);`로 작성할 수 있지만 몇 글자 더 필요함

- datetime 라이브러리의 복잡성을 과소평가하는 사람들을 봄
  - UTC/Unix 시간을 내부 표현으로 사용하거나, 기간을 나노초로 표현하거나, 시간대 대신 오프셋을 사용하라는 의견이 있음
  - Jiff의 설계 문서를 읽어보기를 권장함
  - chrono와의 비교도 유익함

- DST 산술, 라운드 가능한 기간, 시간대 인식 달력 산술, 시간대 충돌 감지 등이 라이브러리를 정확하고 사용하기 쉽게 만듦
  - chrono는 매우 포괄적이고 정확한 라이브러리지만 사용하기 어렵고 경직됨

- 새로운 burntsushi 라이브러리가 나왔다는 농담
  - rustaceans가 crate에서 `tracing`을 사용하지 않는 이유를 아는지 궁금함
  - `log`는 괜찮지만 tz 작업 호출을 추적하는 것은 일반적인 사용 사례가 아님

- 새로운 라이브러리가 멋져 보임
  - burntsushi가 새로운 라이브러리를 만드는 이유가 궁금함
  - 기존 라이브러리의 성능 문제나 API의 불편함 때문인지, 아니면 단순히 재미로 하는 것인지 궁금함

- Rust의 캘린더 라이브러리 상태가 이상적이지 않음
  - Pandas에서는 시간대 변환이 매우 간단하지만 Chrono에서는 복잡함
  - Jiff가 올바른 방향으로 나아가고 있지만 문법이 때때로 이상함

- 기존 시간 라이브러리의 주요 문제는 윤초 지원 부족임
  - UNIX 타임스탬프 대신 TAI를 사용하지 않기 때문임
  - Jiff도 이 문제를 해결하지 못함
  - 윤초를 2월 29일이나 시간대처럼 취급해야 한다고 생각함

- BurntSushi가 Rust 정규 표현식 생태계의 저자임

- Jiff의 발음에 대한 논쟁
  - "gif"처럼 부드러운 "g"로 발음해야 한다는 의견
  - "Giff"처럼 강한 "G"로 발음해야 한다는 의견
