로케일을 고려해 윈도우 명령줄에서 날짜/시간 구하기

  • Post Author:
  • Post Category:칼럼
  • Post Comments:0 Comments
  • Post last modified:October 19, 2012

서비스 운영 중에는 이런저런 목적에 쓸 명령 줄 스크립트를 짤 일이 생긴다. 자동화를 적극적으로 도입할수록 배치 스크립트, 빌드 스크립트 등이 쌓여 가기 때문에 이는 좋은 징조라 봐도 무방하다.

그런데 팀 내부에서 문제가 안 생기던 명령 줄 스크립트이더라도 해외 퍼블리셔에게 전달해주고 나면 제대로 작동 안 한다는 피드백을 받곤 한다. 이런 문제가 발생하면 열의 아홉은 로케일 문제이다. 로케일이라 하면 문화권과 경제 또는 정치 단일체마다 통화, 시간 등의 기준과 표기법이 다른 것을 말한다. 이 중에서 날짜와 시간은 프로그래머를 자주 괴롭히는 녀석이다.

영어권과 한국은 날짜 표기법이 한국어와 다르다. 영어 듣기 시험 때 잘 알아듣고 2012/07/01 로 적었다가 틀린 경험이 있다. 이는 순전히 프로그래머 사이에서나 통할까 말까 하는 표기법이다. 지역에 따라서는 07/01/2012 라 하기도 하고 여러 표기법이 있다.

이런 연유로 배치 스크립트를 짤 때 로케일 생각 없이 함부로 코드를 짜면 낭패를 본다. 예를 들어,

c:> echo %date%

라고 명령 줄에 치면 어떤 결과가 나올까?

정답은 “로케일마다 다르다!”이다. 어떤 곳에선 2012-07-09 가 나오지만 다른 곳에선 09.07.2012 가 나온다. 그러므로 이식성을 생각하면 %date% 로 날짜를 구해선 안 된다.

그럼 이제는 각설하고 이식성 있게 날짜와 시간을 구하는 법을 알아보자.

@echo off
rem Get the time from WMI - at least that's a format we can work with
set X=
for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do if not defined X set X=%%x
echo.%X%

rem dissect into parts
set DATE.YEAR=%X:~0,4%
set DATE.MONTH=%X:~4,2%
set DATE.DAY=%X:~6,2%
set DATE.HOUR=%X:~8,2%
set DATE.MINUTE=%X:~10,2%
set DATE.SECOND=%X:~12,2%
set DATE.FRACTIONS=%X:~15,6%
set DATE.OFFSET=%X:~21,4%

echo %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY% %DATE.HOUR%:%DATE.MINUTE%:%DATE.SECOND%.%DATE.FRACTIONS%

이 코드는 StackOverflow에서 가져왔는데 핵심은 WMI 를 호출해 2012.0709091147.621000+240 이라는 동일한 형식으로 날짜와 시간을 확인하는 코드 wmic os get localdatetime 이다.

이렇게 하여 서비스를 운영하는 곳이 어디든 상관 없이 날짜 기반의 스크립트 코드가 실행가능하게 된다.

Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
follow me
  • https://t.co/ijNlThlxFO 도구 자체보다도 웹 성능을 나타내는 지표가 어떻게 바뀌었는지 보면 흥미롭습니다
    9 hours ago
  • 다주택자가 부동간 정책에 대해 불평할 수도 있지. 뭘 그렇게 생각없는 사람으로 몰아가나? 나이도 있고 부모님이 돌아가셔서 집을 증여받았을 수도 있고 남의 사정을 내가 다 아는 것도 아닌데 그렇게 재단하고 난… https://t.co/uvYSR3lELu
    9 hours ago
  • RT @not_unot_u: 네 번째 올리신 청원글이에요. 너무 고생하고 계시는데 동의 한 번 씩 부탁드립니다. 거의 다 왔습니다! 7월 11일 마감인데 이제 2만명만 채우면 청와대 답변 받을 수 있어요. https://t.co/3mVDM3jsrP
    2 days ago
Buy me a coffeeBuy me a coffee
×
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
Latest Posts