Tanggal berapa?

26

Tantangan

Anehnya, ini belum dilakukan: output tanggal saat ini.

Aturan

Format tanggal yang harus Anda ikuti adalah sebagai berikut:

YYYY-MM-DD

Di mana bulan dan hari harus diisi dengan nol jika jumlahnya kurang dari 10.

Sebagai contoh, jika program dijalankan pada 24 Mei 2017, itu akan ditampilkan

2017-05-24

Tanggal dapat selalu dalam UTC atau tanggal lokal.

Anda harus menangani lompatan tahun. yaitu pada tahun kabisat, Februari memiliki 29 hari tetapi 28 hari pada tahun normal.

Kemenangan

Kode terpendek dalam byte menang.

Peluruhan Beta
sumber
14
Selamat perwakilan 10k!
Rohan Jhunjhunwala
1
Dan selamat atas utas yang paling cepat berkembang yang pernah saya lihat. : D
Titus
@Itus Anda seharusnya melihat Halo, Dunia! : D
Beta Decay
... dan pada tahun-tahun normal, Februari memiliki 31 hari tentunya
edc65
@ edc65 Saya seharusnya benar-benar tahu bahwa Februari adalah 29 hari pada tahun kabisat: P
Beta Decay

Jawaban:

12

Bash , 16 7 byte

-8 byte terima kasih kepada Neil (dan fergusq) (tidak perlu pipa untuk output)
-1 byte terima kasih kepada 12431234123412341234123 (gunakan opsi bawaan dengan bendera -I!)

date -I

Cobalah online!

Jonathan Allan
sumber
2
Mengapa echo $(...)?
Neil
Apakah itu tidak perlu di-output?
Jonathan Allan
6
dateoutput sudah, output disalurkan ke stdout. Anda tidak perlu menyalurkannya ke pipa echo, yang akan mengarahkannya ke stdout. Cobalah online!
fergusq
Tetapi bahkan jika Anda benar-benar ingin menggunakannya echo, setidaknya echo `date +%F`.
manatwork
5
mengapa tidak digunakan -I?
12431234123412341234123
10

PHP, 17 byte

<?=date('Y-m-d');
Titus
sumber
1
Sebenarnya, YYYY-MM-DDThh:mm:ss+hh:mmini juga merupakan tanggal yang diformat ISO 8601 dan 11 byte ini: <?=date(c);cetak semuanya. ;)
Titus
<?=strstr(date(c),T,1);untuk memberi kesempatan pada format c
Jörg Hülsermann
7

Japt , 6 byte

Ks3 ¯A

Cobalah online!

Penjelasan:

Ks3 ¯A
K       // New Date()
 s3     // .toISOString()
    ¯A  // .slice(0,10)
Oliver
sumber
7

Bash, 15 byte

printf '%(%F)T'

Contoh dijalankan:

bash-4.4$ printf '%(%F)T'
2017-05-24

Cobalah online!

manatwork
sumber
Bahkan lebih baik daripada yang saya temukan di SO, tidak menyadarinya T.
Jonathan Allan
@ Jonathanathanan, itu hanya ditambahkan di Bash 4.2 dan sampai Bash 4.3 diperlukan argumen untuk memformat.
manatwork
5

JavaScript (ES6), 34 byte

_=>new Date().toJSON().split`T`[0]

f=

_=>new Date().toJSON().split`T`[0]

console.log(f());

Johan Karlsson
sumber
Hmm, panjangnya sama dengan_=>new Date().toJSON().slice(0,10)
Steve Bennett
4

SQLite, 13 karakter

select date()

Anak baik, SQLite. Dialek SQL lainnya biasanya perlu salah satu current_dateatau date(now()).

Contoh dijalankan:

bash-4.4$ sqlite3 <<< 'select date()'
2017-05-24
manatwork
sumber
1
MySQL telahcurdate
Titus
4

Mathematica, 20 byte

DateString@"ISODate"
J42161217
sumber
9
Kadang-kadang saya menghadapi tantangan ini bukan untuk melihat apakah Mathematica memiliki built-in, tetapi untuk melihat apa itu
PunPun1000
4

Perl 6 ,  14  12 byte

Date.today.say

Cobalah

now.Date.say

Cobalah

Brad Gilbert b2gills
sumber
3

Excel, 24 byte

=TEXT(NOW(),"yyy-mm-dd")

Excel masih akan melakukan tahun 4 digit dengan hanya 3 y's.

Scott Milner
sumber
2
Google sheet akan menambahkan "). Excel tidak mau. Ini akan menambahkan )pada akhirnya tetapi hanya setelah meminta Anda sehingga akan membutuhkan input pengguna tambahan dan menaikkan skor lagi. 24 byte mungkin jawaban Excel terpendek kecuali kami mengizinkan pengaturan regional menggunakan format tanggal ISO secara default dan itu untuk diperdebatkan .
Engineer Toast
@ EngineerToast Terima kasih. Saya akan memperbaikinya.
Scott Milner
2

R , 10 byte

Sys.Date()

Cobalah online!

Giuseppe
sumber
1
Karena sys.datesudah merupakan fungsi, Anda tidak perlu menambahkan (), jadi ini hanya 8 byte :)
JAD
@JarkoDubbeldam tidak benar, () diperlukan
D. Nelson
@ D.Nelson codegolf.meta.stackexchange.com/questions/2419/… Sys.Date adalah fungsi, jadi cukuplah sebagai solusi. Tidak perlu menyebutnya secara eksplisit.
JAD
@JarkoDubbeldam yang biasanya terjadi tetapi saya pikir karena tantangannya adalah 'menampilkan tanggal saat ini dalam format ISO-8601' saya sebenarnya perlu menampilkannya.
Giuseppe
1
Ya, dan baris terakhir Sys.Dateadalah keluaran untuk Anda. Ini mirip dengan ketika Anda memiliki solusi yang dimulai dengan function(x), Anda tidak mengakhirinya dengan panggilan eksplisit. Hanya bagaimana skor built-in.
JAD
2

Lua, 18 karakter

print(os.date"%F")

Contoh dijalankan:

bash-4.4$ lua -e 'print(os.date"%F")'
2017-05-24

Cobalah online!

manatwork
sumber
2

Alice , 9 byte

/oT\
@%;'

Cobalah online!

Penjelasan

Saya akan meninggalkan aliran kontrol yang tepat sebagai latihan untuk pembaca, tetapi kode linear yang sedang dijalankan dalam mode Ordinal adalah:

%T'T%;o@

Dan inilah fungsinya:

%   Split an implicit empty string around an implicit empty string. Really doesn't
    do anything at all.
T   Push the current datetime as a string like "2017-05-24T20:53:08.150+00:00"
'T  Push "T".
%   Split the datetime string around the "T", to separate the date from the time.
;   Discard the time.
o   Output the date.
@   Terminate the program.

Salah satu cara ini bisa golf adalah menggunakan kembali %untuk mengakhiri program dalam mode Kardinal dengan pembagian dengan nol, tetapi satu-satunya tata letak saya datang dengan yang berikut:

\;T
\%o'

Tapi di sini, %sebenarnya tidak menghentikan program, karena kami mendorong 111 ( 'o) tepat sebelumnya sehingga tidak pernah ada pembagian dengan nol.

Pada prinsipnya mungkin juga untuk menggunakan kembali %untuk menyingkirkan ;, karena mencoba membagi tanggal sekitar waktu hanya akan membuang waktu.

Martin Ender
sumber
2

SmileBASIC 3, 29 byte

SB memiliki string tanggal bawaan ... tetapi dalam format yang salah! Ini menggunakan garis miring bukan garis, tidak baik. Plus, sebagai BASIC yang menghargai diri sendiri, tidak ada fungsi ganti global. Saya kira saya harus melakukannya sendiri ...

D$=DATE$D$[4]="-
D$[7]="-
?D$
siput_
sumber
2

VBA, 5 25 byte

?Date tidak dapat diprediksi, tergantung pada pengaturan tanggal pendek sistem

?Format(Now,"yyyy-mm-dd")

Keluaran:

2017-05-25 
Maciej Lipinski
sumber
6
Jawaban ini sangat fluktuatif dan dengan tuli, tidak akan berfungsi pada kebanyakan komputer karena tergantung sepenuhnya pada pengguna yang memiliki format tanggal pendek sistem mereka [di bawah pengaturan -> Tanggal & Waktu di Win10] diatur ke 'YYYY-MM-DD . The default format for this is M / D / YYYY` dan karenanya ini untuk output dari Datefungsi tersebut 5/25/2017. Untuk memperbaikinya, jawaban Anda perlu dibungkus dengan Formatpanggilan.
Taylor Scott
2
@TaylorScott untuk tujuan itu ?format(now,"yyyy-mm-dd")menggunakan nowlebih pendek daridate
Greedo
1
@ Gredo, itu benar. Setahu saya, ini adalah cara terpendek untuk mencapai tujuan ini menggunakan VBA
Taylor Scott
1
@TaylorScott terima kasih untuk menunjukkan ini, saya tidak mengetahui ketergantungan pada pengaturan tanggal sistem. Format tanggal ini adalah default di PC saya dan di negara saya secara umum, jadi saya sedikit terlalu percaya diri di sini.
Maciej Lipinski
1

QBIC , 33 byte

B=_D?_sB,-4|+@-`+_sB,2|+A+_sB,4,2

Penjelasan:

B=_D        Assign the system's date to B$
            This is in American mm-dd-yyyy format, so we'll need to do some reformatting
?_sB,-4|    PRINT substring B, take 4 chars from the right
 +@-`         plus the string literal "-", now A$
 +_sB,2|      plus the leftmost two chars
 +A           and A$ again
 +_sB,4,2     plus the middle part.
steenbergh
sumber
1

CJam , 22 15 byte

et3<{sY0e[}%'-*

Cobalah online!

-7 byte berkat Challenger5.

Penjelasan:

et                       Get array with [year,month,day,stuff...]
  3<                     Slice array to get [y,m,d] 
    {                    For each item do:
     s                     To string
      Y0e[                 add a 0 to the beginning of the string if it is shorter than 2 chars.
          }%             End for each
            '-*          Join the array with "-" as a separator
FrodCube
sumber
Anda dapat menggunakan e[(pad array) selama 15 byte:et3<{sY0e[}%'-*
Esolanging Fruit
@ Challenger5 itu keren. Terima kasih
FrodCube
1

Python 2, 40 byte

from datetime import*;print date.today()
Wondercricket
sumber
1

Oracle SQL, 46 byte

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL
Khaled.K
sumber
1

Powershell, 26 17 byte

Date -f yyy-MM-dd

Terima kasih kepada @ConnorLSW untuk 9 byte.

Sivaprasath Vadivel
sumber
Anda dapat menyimpan banyak di sini. date -f 'yyyy-MM-dd'
colsw
Terima kasih sobat. Saya baru mengenal Powershell. Jadi, saya mencoba keberuntungan saya di sini
Sivaprasath Vadivel
@ Shivaprasath V - jangan khawatir, periksa utas ini untuk beberapa posting bermanfaat dengan trik golf PS yang lebih mendasar jika Anda mau.
colsw
1

Ruby, 23 byte

Mencetak waktu setempat.

p Time.now.strftime'%F'
siput_
sumber
1
p Time.now.to_s[0..9]
manatwork
1

MATLAB / Oktaf , 25 15 byte

datestr(now,29)

Cobalah online!


Fungsi nowbawaan mengembalikan tanggal sistem saat ini dalam format serial MATLAB yang aneh.

datestrmemformat format serial yang aneh menjadi string dari format yang diminta - yang dalam hal ini 'YYYY-mm-dd'. Ternyata MATLAB memiliki daftar format yang telah ditentukan untuk datestr. ISO8601 adalah salah satunya dan diwakili oleh angka 29, yang memungkinkan penghematan 10 byte.

Tom Carpenter
sumber
1

Python 2 ,  53  40 byte

-10 byte berkat Gábor Fekete (ISO-8601 adalah format default untuk objek tanggal)

from datetime import*
print date.today()

Cobalah online!

Bagaimana?

datetime.date.today()akan mengembalikan datetime.dateobjek yang berisi informasi tanggal lokal.

printakan mencetak representasi string dari objek itu, ini akan memanggil __str__fungsi objek.

Dari dokumen :

  • date.__str__(): Untuk a date d, str(d)setara dengan d.isoformat().

  • date.isoformat(): Mengembalikan yang stringmewakili tanggal dalam format ISO 8601‘YYYY-MM-DD’ ,. Sebagai contoh date(2002, 12, 4).isoformat() == '2002-12-04',.

Jonathan Allan
sumber
1
import datetime;print datetime.date.today()ini hanya 43 byte dan menggunakan datetime. Mengapa versi yang lebih pendek dihapus?
Gábor Fekete
@ GáborFekete Terima kasih (saya pikir Anda harus benar-benar memposting, itu cukup berbeda). Jawaban lainnya mungkin dihapus karena tidak mencetak string yang diformat dengan benar. Saya telah menambahkan penjelasan tentang mengapa ini benar-benar bekerja (asalkan orang memasukkannya print). Menyelamatkan tiga perbuatan lainnya (kejahatan) import*.
Jonathan Allan
Saya ingin tetapi ada solusi lain yang bahkan lebih pendek dari milik saya tetapi dihapus karena beberapa alasan.
Gábor Fekete
... yang sekarang telah diedit untuk memasukkan printsaat dihapus lalu dihapus.
Jonathan Allan
1

Crystal , 30 byte 24 byte 21 byte

-6 Terima kasih kepada Nick Clifford

-3 dari melihat jawaban snail_ di Ruby

p Time.now.to_s("%F")

Cobalah online!

TitusLucretius
sumber
2
Saya cukup yakin Anda bisa menggunakannya %F. Juga, senang melihat Crystal di PPCG!
Nick Clifford
1
@Nick Clifford, saya melihatnya di tio dan berpikir itu punya nama keren.
TitusLucretius
1

Rust, 84 Bytes

extern crate chrono;fn main(){print!("{}",chrono::Local::now().format("%Y-%m-%d"));}
Chad Baxter
sumber
1

C #, 46 45 byte

_=>System.DateTime.Now.ToString("yyy-MM-dd");

Menyimpan satu byte berkat @raznagul.

TheLethalCoder
sumber
2
Di mana saya mengunduh Sytem?
Erik the Outgolfer
6
@EriktheOutgolfer Ini adalah pembungkus khusus yang saya buat di sekitar Systemnamespace karena saya terus melakukan kesalahan ketik yang sama ...
TheLethalCoder
4
Anda tahu hal-hal yang Anda buat secara lokal tidak diperbolehkan di PPCG kecuali itu dipublikasikan sebelum pertanyaan diajukan. : P
Erik the Outgolfer
1
@EriktheOutgolfer Sial, lain kali aku akan membuat pembungkus yang lebih pendek juga ...
TheLethalCoder
1
Karena nol terkemuka untuk tahun ini tidak diperlukan, format string "yyy-MM-dd"juga akan berfungsi.
raznagul
1

Java 8, 26 32 byte

()->java.time.LocalDate.now()+""

Memperbaiki format berkat Kevin Cruijssen

jaxad0127
sumber
Wow, Java sebenarnya pendek ... Saya tidak pernah mengira akan melihat hari: D
Beta Decay
@ BetaDecay Ini singkat, tetapi saat ini tidak mematuhi aturan codegolf standar. Seharusnya fungsi bukan potongan, dan impor yang diperlukan juga harus dihitung. Jadi itu seharusnya ()->java.time.LocalDate.now().toString(). Kemudian lagi, Anda dapat golf .toString()untuk +"", sehingga menjadi ()->java.time.LocalDate.now()+""total ( 32 bytes ).
Kevin Cruijssen
1

C ++ 14, 143 byte 139 byte

#include <cstdio>
#include <time.h>
int main (){time_t t;char D[11];time(&t);strftime(D,sizeof D,"%Y-%m-%d",localtime(&t));printf("%s",D);}

Timtech menunjukkan kepada saya bahwa saya tidak membutuhkan semua ruang

Uji aku!

bangsawan
sumber
Tidak bisakah Anda menghapus beberapa ruang itu?
Timtech
1

Swift, 13 byte

print(Date())
Dimitrie-Toma Furdui
sumber