미래의 날짜를 얻고 싶다면 왜 현재 날짜를 얻고 sed/awk/etc를 사용할 수 없습니까?

미래의 날짜를 얻고 싶다면 왜 현재 날짜를 얻고 sed/awk/etc를 사용할 수 없습니까?

방금 봤어이 문제.첫 번째 답변date 명령에서 직접 미래 날짜를 가져오는 방법을 보여줍니다. 날짜를 증가시키기 위해 텍스트 조작을 사용할 수 없는 이유는 무엇입니까? 원래:

date | # increment the time string by some amount here

나는 익숙하지 않거나 awksed나은 예를 들겠습니다.

편집하다:그럼 기술적인 이유는 전혀 없나요? 단지 휴대성과 보기보다 어렵다는 사실 때문일까요?

답변1

할 수는 있지만 복잡해집니다. 1970년 1월 1일 목요일 자정 이후 경과된 초 수와 같이 간단한 초 단위의 날짜가 있는 경우(POSIX 시간), 1분을 추가하는 것은 비교적 쉽습니다.

$ date +%s
1379385111
$ date +%s | awk '{print "Current time is",$1,"soon will be", $1+60}'
Current time is 1379385275 soon will be 1379385335

괜찮습니다. 하지만 사람이 읽을 수 있는 시간으로 하고 싶다면 어떻게 해야 할까요? 4개월 2주를 추가하고 싶다면? 몇 초 안에 계산하는 것도 고통스럽고, 그러한 날짜를 해석하는 것도 쉽지 않습니다. 예를 들어, 1을411174000 나타내는 날짜는 무엇입니까 ?

Sun 12 Dec 1936예를 들어 3주를 어떻게 추가하나요? 날짜 조작 라이브러리를 사용할 수 없다면 이는 놀라울 정도로 까다로운 문제가 될 것입니다. 모든 날짜를 초로 변환한 다음 더해 보세요. 2월과 윤년은 물론이고 어떤 달은 30일이고 어떤 달은 31일이라는 점을 기억하세요. 이것은 실제로 작은 문제가 아닙니다. 이것이 바로 대부분의 프로그래밍 언어가가지다날짜 연산 라이브러리(진주예를 들어, 또는).

게다가 또는 같은 날짜를 date처리할 수 있고 이를 더하거나 뺄 수 있으며 숫자 문자열 대신 사람이 읽을 수 있는 날짜를 반환할 수 있습니다.tomorrow Oct 18 2017

표준 절차를 통해 이를 쉽게 수행할 수 있는데 date왜 우리는 바퀴를 재발명해야 합니까 ?

1오늘은 1983년 1월 12일 수요일 00:00:00 CET입니다.

답변2

시간과 날짜를 조작하기 위해 잘 고안된 라이브러리 이외의 다른 것을 사용하는 것은 나쁜 생각입니다. 사소해 보이는 문제가 일광 절약 시간, 윤년, 윤초, 시간대 등과 같은 매우 복잡한 문제로 빠르게 바뀔 수 있습니다.

프로그래머들은 "아, 이거 하려면 빠른 기능 한두 개만 하면 되지"라고 끊임없이 생각하는데, 최근 이벤트를 되돌아볼 필요도 없고, 애플 개발자들도 그렇게 생각하고 이벤트를 제대로 처리하지 않았다.일광 절약 시간으로의 올바른 변환.

발췌

일광 절약 시간(DST)은 몇 시간 전에 미국에서 시작되었습니다. 즉, 시계가 오전 1시 59분에서 오전 3시로 빨라졌습니다.

그러나 일부 iPhone 사용자는 일광 절약 시간제 변경과 관련된 다양한 문제를 보고했습니다.

TUAW 보고서:

몇몇 독자들은 어젯밤에 그들의 iPhone 시계가 예상대로 한 시간 앞으로 나아가지 않고 대신 자동 시간대 조정 문제로 인해 잘못된 방향, 즉 한 시간 뒤로 이동했다고 보고했습니다. 내쉬빌에 있는 한 독자의 전화는 그가 산지 표준시(Mountain Time)에 있다고 생각했고, 플로리다에 있는 독자의 전화는 시카고 시간이라고 확신했습니다. 우리 동료 Mel Martin은 주로 일광 절약 시간을 준수하지 않는 애리조나에 살고 있습니다. 그러나 그의 전화기(자동 시간대 설정 및 위치 설정이 켜져 있음)가 실수로 한 시간 앞당겨졌습니다.

결론

문제가 단순하다는 사실에 현혹되지 말고 라이브러리를 사용하세요!

답변3

기본적으로는 가능하지만 이식성이 부족하고 실패할 수 있으며 결국 더 많은 노력이 필요하게 됩니다.

awk분을 3씩 증가시키고 싶다고 가정해 보겠습니다 . (59보다 크면 무시하고 이제 00으로 재설정해야 합니다):

$ date
Mon Sep 16 22:52:42 AST 2013
$ date | awk -F: '{printf $1 ":" ; printf $2+3 ":" ; print $3}'
Mon Sep 16 22:55:43 AST 2013

거기가 좋아요. 하지만 이제는 분이 59에 도달할 때마다 00으로 재설정되는 기능을 개발해야 합니다. 더 이상 좋지 않습니다. 따라서 텍스트를 파싱하는 것보다 시간을 늘리는 자연스러운 방법이 선호됩니다.

관련 정보