วันที่ในเวลา Usenet คืออะไร?


9

กันยายน 1993 เป็นที่รู้จักใน Usenet ในเดือนกันยายนที่ไม่สิ้นสุด ตัวอย่างเช่นวันที่มีการโพสต์คำถามนี้คือวันเสาร์, กันยายน 8740, 1993

โปรแกรมหรือฟังก์ชั่นของคุณควรใช้วันที่แบบคริสต์ศักราช (พร้อมปีบวก) เป็นอินพุตและส่งคืนวันที่เดียวกับผลลัพธ์ถ้าเป็นก่อนกันยายน 1993 หรือวันที่ในปฏิทินกันยายน 1993 หากหลังจากนั้น

คุณอาจยอมรับ YYYY-MM-DD, YYYY / MM / DD, MM / DD / YYYY, DD / MM / YYYY, D-Monthnameabbr-YYYY หรือรูปแบบที่นิยมอื่น ๆ ที่ใช้ครบทั้งปี (ตรงข้ามกับ ปีแบบโมดูโล 100) คุณต้องยอมรับรูปแบบที่คุณเลือกเท่านั้น รูปแบบผลลัพธ์ต้องตรงกับรูปแบบอินพุต

อินพุตตัวอย่าง→เอาท์พุท:

  • วันอาทิตย์ที่ 6 สิงหาคม 2560 →วันอาทิตย์ที่ 8741 กันยายน 2536
  • วันอังคารที่ 28 มกราคม 2529 →วันอังคารที่ 28 มกราคม 2529

หรือ:

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

เพื่อประโยชน์ของคำตอบที่น่าสนใจยิ่งขึ้นการใช้ฟังก์ชั่นในตัวที่ออกแบบมาเพื่อวัตถุประสงค์นี้ (เช่นsdateคำสั่งUN * X ) ไม่ได้รับอนุญาต นอกเหนือจากนั้นและข้อยกเว้นมาตรฐานนี่คือกอล์ฟดังนั้นคำตอบที่สั้นที่สุดชนะ


1
คุณหมายถึงฉันไม่สามารถใช้ DateDifference เพื่อให้ผู้คนที่นี่สามารถแสดงความคิดเห็นกับ builtin ของ Mathematica ???
J42161217

@Jenny_mathy ความแตกต่างวันนี้หรือไม่ ฉันเดาว่าคุณสามารถใช้ใช่แล้วทำไมล่ะ
msh210

คำตอบ:



3

Python 3 , 109 ไบต์

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

ลองออนไลน์!

ขอบคุณ -59 ไบต์สำหรับ notjagan
-3 ไบต์ขอบคุณ Mr. Xcoder
-2 ไบต์ขอบคุณอย่างเป็นทางการว่า
-12 ไบต์ขอบคุณ Jonathan Allan



1
หรือดีกว่านั้น-59 ไบต์
notjagan


1
-8644+1สามารถ-8643..
เป็นทางการใน

1
@ Mr.Xcoder จำเป็นต้องเป็นz>9อย่างอื่นคุณจะสูญเสียศูนย์นำในวันนั้น
Neil

2

Mathematica ขนาด 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 ไบต์ thanx ถึง user202729


คุณจะพิจารณาเปลี่ยนเครื่องหมายเวลา{1993,9,1}ย้อนกลับหนึ่งวันเพื่อลบการ+1บันทึก 2 ไบต์หรือไม่
user202729

ขอบคุณ ฉันควรพยายามที่จะสุภาพมากขึ้นในครั้งต่อไป และฉันก็ไม่รู้ด้วยซ้ำว่า{1993,9,0}ได้รับอนุญาต
user202729

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 Core) , 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

Gaiaขนาด 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.