Usenet时间是几点?


9

1993年9月在Usenet上被称为永无止境的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月8741日星期日
  • 1986年1月28日,星期二→1986年1月28日,星期二

要么:

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

为了获得更有趣的答案,sdate不允许使用为此目的而设计的内置函数(例如UN * X 命令)。除此之外和标准的例外,这就是高尔夫,所以最简单的回答胜。


1
你的意思是我不能使用DateDifference,以便这里的人可以评论Mathematica的内置函数???
J42161217 '17

@Jenny_mathy,这个DateDifference吗?我想您可以使用它,是的,为什么不呢?
msh210 '17

Answers:


2

JavaScript(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

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字节感谢Xcoder先生
-2字节感谢Officialaimm
-12字节感谢Jonathan Allan



1
或更好的是,-59字节。
notjagan


1
-8644+1可以是-8643..
Officialaimm

1
@ Mr.Xcoder需要成为z>9否则,您当天会丢失前导零。
尼尔

2

Mathematica,55个字节

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

输入输出

{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

盖亚,78个字节

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

在线尝试!

说明

首先,我们有一个辅助函数,该函数确定一年是否为a年。

ℍ       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.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.