유즈넷 시간의 날짜는 무엇입니까?


9

1993 년 9 월은 유즈넷에서 9 월으로 끝나지 않았습니다. 예를 들어이 질문이 게시되는 날짜는 1993 년 9 월 8740 일 토요일입니다.

프로그램 또는 함수는 그레고리력 날짜 (양수 연도)를 입력으로 사용하고 1993 년 9 월 이전 인 경우 출력과 동일한 날짜를 반환하거나 그 이후 인 경우 1993 년 9 월 달력의 날짜를 반환해야합니다.

YYYY-MM-DD, YYYY / MM / DD, MM / DD / YYYY, DD / MM / YYYY, D-Monthnameabbr-YYYY 또는 연중 전체를 사용하는 다른 형식을 사용할 수 있습니다 ( 연도 모듈러스 100). 선택한 형식 중 하나만 허용하면됩니다. 출력 형식은 입력 형식과 일치해야합니다.

샘플 입력 → 출력 :

  • 2017 년 8 월 6 일 일요일 → 1993 년 9 월 87 일 일요일
  • 1986 년 1 월 28 일 화요일 → 1986 년 1 월 28 일 화요일

또는:

  • 2017-08-06 → 1993-09-8741
  • 1986-01-28 → 1986-01-28

보다 흥미로운 답변을 위해이 목적으로 설계된 내장 함수 (UN * X sdate명령 등)를 사용할 수 없습니다. 그와 표준 예외를 제외 하고 이것은 골프이므로 최단 답변이 이깁니다.


1
당신은 내가 사람들이 Mathematica의 내장에 댓글을 달 수 있도록 DateDifference를 사용할 수 없다는 것을 의미합니까 ???
J42161217

@Jenny_mathy, 이 DateDifference ? 나는 당신이 그것을 사용할 수 있다고 생각합니다.
msh210

답변:


2

자바 스크립트 (ES6), 48 바이트

f=
s=>(d=new Date(s)/864e5-8643|0)>9?'1993-09-'+d:s
<input size=10 oninput=o.textContent=/\d{4}(-\d\d){2}/.test(this.value)?f(this.value):``><pre id=o>

@ Mr.Xcoder의 알고리즘을 기반으로합니다.


3

파이썬 3 , 109 바이트

from datetime import*
i=input()
z=date(*map(int,i.split())).toordinal()-727806
print([i,'1993 09 %d'%z][z>9])

온라인으로 사용해보십시오!

notjagan 덕분에 -59 바이트
Mr. Xcoder 덕분에 -3 바이트 -officialaimm 덕분에
-2 바이트 -Jonathan
Allan 덕분에 -12 바이트



1
또는 더 나은 -59 바이트.
notjagan


1
-8644+1할 수 있습니다 -8643..
officialaimm

1
@ Mr.Xcoder z>9그렇지 않으면 당일 선행 0을 잃을 필요가 있습니다 .
Neil

2

수학, 55 바이트

If[(s=#&@@{1993,9}~DateDifference~#)>0,{1993,9,s+1},#]&

I / O

{2017, 8, 6}-> {1993, 9, 8741}
{1986, 1, 28}-> {1986, 1, 28}

사용자에게 -6 바이트 감사


{1993,9,1}을 제거하고 +12 바이트를 절약 하기 위해 시간 표시를 하루 단위로 다시 변경 하시겠습니까 ?
user202729 2016 년

감사. 다음에 더 정중하게 노력해야합니다. 그리고 나는 {1993,9,0}허용 조차 모른다 .
user202729 2016 년

1

Perl 5 , 102 + 16 (-MTime :: Local -F-) = 118 바이트

$,='-';say @F=($t=timelocal(0,0,0,$F[2],$F[1]-1,$F[0]-1900)-749433599)>0?(1993,'09',31+int$t/86400):@F

온라인으로 사용해보십시오!

날짜를 "YYYY-MM-DD"로 사용

커맨드 라인 옵션에서 카운트를 올바르게했다고 생각합니다. 내가하지 않으면 누군가 나를 교정 할 것이라고 확신합니다.


1

C # (. NET 코어) 107 바이트

s=>{var d=(System.DateTime.Parse(s)-new System.DateTime(1993,8,31)).TotalDays;return d<1?s:"9/"+d+"/1993";}

온라인으로 사용해보십시오!

날짜를 M / D / YYYY (10 자리 미만의 숫자는 1 자리로만 기록)로 사용합니다. API를 사용하여 휴대폰에서 작성했습니다.


1

가이아 , 78 바이트

ℍZ¤∨4Ė
:'//d¦[1993₉31];>\{\‡:(…1993>↑¦365+¦¤ṇ↑∂K∂k,=;((<¤)-243]_ḥΣ“1993/09/”¤+}?

온라인으로 사용해보십시오!

설명

첫째, 우리는 연도가 윤년인지를 결정하는 도우미 기능을 가지고 있습니다.

ℍ       100
 Z      Divmod year by 100, pushing the first 2 digits, then the second 2 digits
  ¤     Swap
   ∨    Logical OR, gives the left-most non-zero number
    4Ė  Check for divisibility by 4

주요 기능은 나머지 작업을 수행합니다.

:              Push two copies of the input.
'//            Split the top on on slashes.
d¦             Parse each section as a number.
[1993₉31]      Push the list [1993 9 31].
;>             Copy the date and check if its less than that.
\              If it is, delete the list and leave the input string on top.
{              Else:
 :(             Copy the date and get the year.
 …1993>         Get the range from 1993 to year-1.
 ↑¦365+¦        Map each to 365+(whether it's a leap year).
 ¤              Swap, bring the date back to the top.
 ṇ↑             Pull out the year and check if it's a leap year.
 ∂K∂k,          Push the pair of lists [[days in months in a leap year] [days in months]]
 =              Index the result of checking if the year is a leap year into the pair.
 ;((<           Get the first (month number - 1) elements.
 ¤              Swap, bring date back to the top.
 )              Get the day.
 -243           Push -243 (243 is the number of days between Jan 1 1993 and Sept 1 1993).
 ]              Wrap everything in a list.
 _              Flatten the list.
 ḥ              Remove the first element (the input string).
 Σ              Sum it.
 “1993/09/”¤+   Append the resulting number to "1993/09/".
}?             (end if)
               Implicitly display whatever is on top of the stack.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.