Ngày tháng, thời gian Usenet là gì?


9

Tháng 9 năm 1993 được biết đến trên Usenet là tháng 9 không bao giờ kết thúc. Vì vậy, ví dụ, ngày câu hỏi này được đăng là Thứ Bảy, tháng 9 năm 8740, 1993.

Chương trình hoặc chức năng của bạn sẽ lấy bất kỳ ngày Gregorian nào (có năm dương) làm đầu vào và trả lại cùng ngày với đầu ra nếu trước tháng 9 năm 1993 hoặc ngày trên lịch tháng 9 năm 1993 nếu sau đó.

Bạn có thể chấp nhận YYYY-MM-DD, YYYY / MM / DD, MM / DD / YYYY, DD / MM / YYYY, D-Monthnamablesbr-YYYY hoặc bất kỳ định dạng phổ biến nào khác sử dụng toàn bộ năm (trái ngược với năm modulo 100). Bạn chỉ cần chấp nhận một định dạng như vậy, theo lựa chọn của bạn. Định dạng đầu ra phải phù hợp với định dạng đầu vào.

Đầu vào mẫu → đầu ra:

  • Chủ nhật, ngày 6 tháng 8 năm 2017 → Chủ nhật, 8741 tháng 9 năm 1993
  • Thứ ba, 28 tháng 1 năm 1986 → Thứ ba, 28 tháng 1 năm 1986

Hoặc là:

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

Vì lợi ích của các câu trả lời thú vị hơn, việc sử dụng chức năng tích hợp được thiết kế cho mục đích này (chẳng hạn như lệnh UN * X sdate) không được phép. Bên cạnh đó và các trường hợp ngoại lệ tiêu chuẩn , đây là golf, vì vậy câu trả lời ngắn nhất sẽ thắng.


1
ý bạn là tôi không thể sử dụng DateDifference để mọi người ở đây có thể nhận xét về nội dung của Mathicala ???
J42161217

@Jenny_mathy, DateDifference này ? Tôi đoán bạn có thể sử dụng nó, yeah, tại sao không?
msh210

Câu trả lời:


2

JavaScript (ES6), 48 byte

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>

Dựa trên thuật toán của @ Mr.Xcoder.


3

Python 3 , 109 byte

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

Hãy thử trực tuyến!

-59 byte nhờ notjagan
-3 byte nhờ ông Xcoder
-2 byte nhờ chính thức
-12 byte nhờ Jonathan Allan



1
Hoặc tốt hơn nữa, -59 byte.
notjagan


1
-8644+1có thể -8643..
chính thức tuyên bố

1
@ Mr.Xcoder Cần z>9nếu không bạn sẽ mất số 0 đứng đầu trong ngày.
Neil

2

Toán học, 55 byte

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

Tôi / O

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

-6 byte sox đến user202729


Bạn có xem xét thay đổi dấu thời gian {1993,9,1}trở lại sau một ngày để xóa +12 byte không?
dùng202729

Cảm ơn. Tôi nên cố gắng lịch sự hơn vào lần tới. Và tôi thậm chí không biết {1993,9,0}là được phép.
dùng202729

1

Perl 5 , 102 + 16 (-MTime :: Local -F-) = 118 byte

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

Hãy thử trực tuyến!

Lấy ngày là "YYYY-MM-DD"

Tôi nghĩ rằng tôi đã đếm đúng trên các tùy chọn dòng lệnh. Tôi chắc chắn ai đó sẽ sửa tôi nếu tôi không.


1

C # (.NET Core) , 107 byte

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

Hãy thử trực tuyến!

Có ngày là M / D / YYYY (số dưới 10 được viết chỉ với 1 chữ số). Viết từ điện thoại di động của tôi bằng cách sử dụng API bằng trái tim.


1

Gaia , 78 byte

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

Hãy thử trực tuyến!

Giải trình

Đầu tiên, chúng ta có một hàm trợ giúp xác định xem một năm có phải là năm nhuận hay không.

ℍ       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

Các chức năng chính làm phần còn lại của công việc:

:              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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.