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.


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!


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');

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

Bash, 15 byte

printf '%(%F)T'

Contoh dijalankan:

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

Cobalah online!


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());


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

1
MySQL telahcurdate
Titus

4

Mathematica, 20 byte

DateString@"ISODate"

9
Kadang-kadang saya menghadapi tantangan ini bukan untuk melihat apakah Mathematica memiliki built-in, tetapi untuk melihat apa itu
PunPun1000


3

Excel, 24 byte

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

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


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!


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

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.


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$

2

VBA, 5 25 byte

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

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

Keluaran:

2017-05-25 

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.

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

Anda dapat menggunakan e[(pad array) selama 15 byte:et3<{sY0e[}%'-*
Esolanging Fruit

@ Challenger5 itu keren. Terima kasih
FrodCube



1

Oracle SQL, 46 byte

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL

1

Powershell, 26 17 byte

Date -f yyy-MM-dd

Terima kasih kepada @ConnorLSW untuk 9 byte.


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

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.


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',.


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

Rust, 84 Bytes

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

1

C #, 46 45 byte

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

Menyimpan satu byte berkat @raznagul.


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


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!


Tidak bisakah Anda menghapus beberapa ruang itu?
Timtech

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.