시간 변환/형식 지정을 위한 명령줄 도구

시간 변환/형식 지정을 위한 명령줄 도구

시간을 변환/형식화하는 명령줄 도구가 있나요? (날짜가 아니라 시간을 의미합니다!)

이것이 내가 기대하는 것입니다:

$ timeconverter --format '%s' 1h
3600
$ timeconverter --format '%h:%m:%s' 3665s
1:01:05
$ timeconverter --format '%H:%m:%s' 3665s
01:01:05
$ timeconverter --format '%Hh%Mm%Ss' 3966s
1h5m6s
$ timeconverter --format '%m' 2d
2880
$ timeconverter --format '%d' 1w
7
$ timeconverter --format '%y' 365d
1
$ timeconverter --format '%s' 1h10m
4200

여기서 %m은 분, %d는 일, %y는 연도, %h는 시간, %s는 초, %w는 주 등입니다.

내가 직접 쉘 스크립트를 작성할 수도 있지만 다른 사람이 이미 작성했을 가능성이 높으므로 시간을 절약하고 싶습니다.

답변1

GNU 소프트웨어가 있습니다단위(많은 Linux 배포판에서 패키지로 사용 가능 units)

다음은 2주 동안의 일수를 구하는 간단한 실행입니다.

$ units "2 week" day
* 14
/ 0.071428571

이것맨페이지입력, 출력, 종료 코드 및 명령을 사용하는 기타 방법이 자세히 설명되어 있습니다.

답변2

GNU date명령에는 여러분이 원하는 것의 대부분이 포함되어 있습니다. alias원하는 명령을 더 짧게 만들기 위해 정의할 수 있습니다 .

아래 예에서는 일부 예에서 사용할 별칭을 정의했습니다.

alias timeconverter='date -u -d "1970-01-01 + '

따라서 원래 목록을 사용하면 여기에 다양한 가능성이 있습니다 (일부는 units다른 답변에서 제안된 바와 같음)

$ timeconverter --format '%s' 1h
3600
$ date -u -d "1970-01-01 01:00" +%s
3600

$ date -u -d "1970-01-01 + 1 hour" +%s
3600

$ units -t "1 hour" seconds
3600

$ timeconverter 1 hour" +'%s'
3600

$ timeconverter --format '%h:%m:%s' 3665s
1:01:05
$ date -u -d "@3665" +'%-k:%M:%S'
1:01:05

$ units "3665 seconds" time
    1 hr + 1 min + 5 sec

$ timeconverter 3665 seconds" +'%-k:%M:%S'
1:01:05
$ timeconverter --format '%H:%m:%s' 3665s
01:01:05
$ date -u -d "@3665" +'%H:%M:%S'
01:01:05

$ date -u -d "@3665" +'%T'
01:01:05

$ date -u -d "1970-01-01 + 3665 sec" +'%H:%M:%S'
01:01:05

$ date -u -d "1970-01-01 + 3665 seconds" +'%H:%M:%S'
01:01:05

$ timeconverter 3665 seconds" +'%H:%M:%S'
01:01:05
$ timeconverter --format '%Hh%Mm%Ss' 3966s
1h5m6s
$ date -u -d "@3966" +'%-kh%-Mm%-Ss'
1h6m6s
$ timeconverter --format '%m' 2d
2880
$ echo $(( $(date -u -d "1970-01-01 + 2 days" +'%s') / 60 ))
2880
$ timeconverter --format '%d' 1w
7
$ echo $(( $(date -u -d "1970-01-01 + 1 week" +'%s') / 60 / 60 / 24 ))
7
$ timeconverter --format '%y' 365d
1
$ echo $(( $(date -u -d "1970-01-01 + 365 days" +'%Y') - 1970 ))
1
$ timeconverter --format '%s' 1h10m
4200
$ date -u -d "1970-01-01 + 1 hour 10 min" +'%s'
4200

답변3

이를 수행할 수 있는 성숙한 명령줄 도구가 이미 있다고 가정하지 마십시오. 주된 이유는 아마도 그렇게 하면 많은 함정이 생길 수 있기 때문일 것입니다. 인간의 시간은 그리 선형적이지 않기 때문입니다.

예: 향후 2년이 몇 분인지 알고 싶습니다. 이 숫자는 2022년이 윤년인지 2023년이 윤년인지에 따라 달라집니다.

정말로 "표준" 단위를 사용하고 싶다면(즉, 현실을 무시하세요):

아마도 이것을 쉘 스크립트가 아니라 /usr/bin/env python3 -I -S입력 인수를 초로 변환한 다음 필요한 정수 나누기 및 모듈러스를 계산한 후 형식 문자열을 문자열 형식 지정 함수에 전달하는 아주 작은 스크립트로 구현할 것입니다. 출력할 수 있는 모든 잠재적 필드.

어쨌든 반복하겠습니다. 이 작업을 수행하는 데는 몇 가지 좋은 이유가 있지만 많지는 않습니다. 일반적으로 결과가 무엇인지 알 수 없는 경우 기간 변환은 위험할 수 있습니다. 실제로는 오전 8시 9분 이후에 울리게 될 "알람이 600분 후에 울릴 것입니다"라고 인쇄합니다.뒤쪽에일광 절약 시간제에 맞게 시계를 조정하는 것은 나쁜 생각입니다.

관련 정보