Ngày gì?


26

Thử thách

Thật kỳ lạ, điều này vẫn chưa được thực hiện: xuất ngày hiện tại.

Quy tắc

Định dạng ngày bạn nên tuân theo như sau:

YYYY-MM-DD

Trường hợp tháng và ngày nên được đệm bởi các số 0 nếu chúng nhỏ hơn 10.

Ví dụ: nếu chương trình được chạy vào ngày 24 tháng 5 năm 2017, chương trình sẽ xuất ra

2017-05-24

Ngày có thể luôn luôn ở UTC hoặc ngày địa phương.

Bạn phải xử lý năm nhuận. tức là trong những năm nhuận, tháng hai có 29 ngày nhưng 28 ngày trong một năm bình thường.

Chiến thắng

Mã ngắn nhất trong byte thắng.


14
Chúc mừng đại diện 10k!
Rohan Jhunjhunwala

1
Và chúc mừng cho chủ đề phát triển nhanh nhất tôi từng thấy. : D
Tít

@Titus Bạn nên xem Hello, World! : D
Beta Decay

... và trong những năm bình thường, tháng 2 có 31 ngày tất nhiên
edc65

@ edc65 Tôi thực sự nên biết rằng Tháng Hai dài 29 ngày vào những năm nhuận: P
Beta Decay

Câu trả lời:


12

Bash , 16 7 byte

-8 byte nhờ Neil (và fergusq) (không yêu cầu đường ống để xuất)
-1 byte nhờ 12431234123412341234123 (sử dụng tùy chọn tích hợp có cờ -I!)

date -I

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


2
Tại sao echo $(...)?
Neil

Nó không cần nó để đầu ra?
Jonathan Allan

6
dateđầu ra đã có, đầu ra được dẫn đến thiết bị xuất chuẩn. Bạn không cần phải đặt nó vào echo, mà dẫn nó đến thiết bị xuất chuẩn. Hãy thử trực tuyến!
fergusq

Nhưng ngay cả khi bạn thực sự muốn sử dụng echo, thì ít nhất echo `date +%F`.
manatwork

5
tại sao không sử dụng -I?
12431234123412341234123

10

PHP, 17 byte

<?=date('Y-m-d');

1
Trên thực tế, YYYY-MM-DDThh:mm:ss+hh:mmđây cũng là một ngày được định dạng ISO 8601 và 11 byte này: <?=date(c);in toàn bộ nội dung. ;)
Tít

<?=strstr(date(c),T,1);để cung cấp cho định dạng c một cơ hội nhỏ
Jörg Hülsermann


7

Bash, 15 byte

printf '%(%F)T'

Chạy mẫu:

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

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


Thậm chí tốt hơn tôi tìm thấy trên SO, không biết T.
Jonathan Allan

@Jonathan ALLan, nó chỉ được thêm vào trong Bash 4.2 và cho đến Bash 4.3, nó yêu cầu một đối số để định dạng.
manatwork


4

SQLite, 13 ký tự

select date()

Cậu bé ngoan, SQLite. Các phương ngữ SQL khác thường cần current_datehoặc date(now()).

Chạy mẫu:

bash-4.4$ sqlite3 <<< 'select date()'
2017-05-24

1
MySQL cócurdate
Tít

4

Toán học, 20 byte

DateString@"ISODate"

9
Đôi khi tôi gặp phải những thách thức này không phải để xem
Mathicala


3

Excel, 24 byte

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

Excel vẫn sẽ thực hiện một năm gồm 4 chữ số chỉ với 3 ygiây.


2
Google sheet sẽ thêm "). Excel sẽ không. Nó sẽ thêm )vào cuối nhưng chỉ sau khi nhắc bạn để nó yêu cầu thêm người dùng nhập và tăng điểm số một lần nữa. 24 byte có lẽ là câu trả lời Excel ngắn nhất trừ khi chúng tôi cho phép cài đặt khu vực sử dụng định dạng ngày ISO theo mặc định và đó là tranh luận .
Kỹ sư Toast

@EngineerToast Cảm ơn. Tôi sẽ sửa nó.
Scott Milner

2

R , 10 byte

Sys.Date()

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


1
sys.dateđã là một hàm, bạn không cần phải thêm (), vì vậy đây chỉ là 8 byte :)
JAD

@JarkoDubbeldam không đúng, () là cần thiết
D. Nelson

@ D.Nelson codegolf.meta.stackexchange.com/questions/2419/ mài Sys.Date là một chức năng, vì vậy sẽ đủ là giải pháp. Không cần phải gọi nó một cách rõ ràng.
JAD

@JarkoDubbeldam thường là như vậy nhưng tôi nghĩ rằng vì thách thức là 'xuất ngày hiện tại ở định dạng ISO-8601' Tôi thực sự cần phải xuất nó.
Giuseppe

1
Vâng, và dòng cuối cùng của Sys.Dateđầu ra cho bạn. Nó tương tự như khi bạn có một giải pháp bắt đầu function(x), bạn cũng không kết thúc bằng một cuộc gọi rõ ràng. Đó chỉ là cách tích hợp được ghi.
JAD


2

Alice , 9 byte

/oT\
@%;'

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

Giải trình

Tôi sẽ để lại luồng điều khiển chính xác dưới dạng bài tập cho người đọc, nhưng mã được tuyến tính hóa đang được chạy ở chế độ Thông thường là:

%T'T%;o@

Và đây là những gì nó làm:

%   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.

Một cách mà điều này có thể chơi được là sử dụng lại % để chấm dứt chương trình ở chế độ Cardinal với số chia cho 0, nhưng cách bố trí duy nhất tôi nghĩ ra là như sau:

\;T
\%o'

Nhưng ở đây, % không thực sự chấm dứt chương trình, bởi vì chúng tôi đã đẩy 111 ( 'o) ngay trước đó để không bao giờ chia cho số không.

Về nguyên tắc, nó cũng có thể được sử dụng lại %để thoát khỏi ;, vì cố gắng phân chia ngày trong khoảng thời gian sẽ chỉ đơn giản là loại bỏ thời gian.


2

SmileBASIC 3, 29 byte

SB có một chuỗi ngày được xây dựng trong ... nhưng nó ở định dạng sai! Nó sử dụng dấu gạch chéo thay vì dấu gạch ngang, không tốt. Thêm vào đó, là BASIC tự trọng, không có chức năng thay thế toàn cầu. Tôi đoán tôi phải tự làm điều đó ...

D$=DATE$D$[4]="-
D$[7]="-
?D$

2

VBA, 5 25 byte

?Date không thể đoán trước, phụ thuộc vào cài đặt ngày ngắn của hệ thống

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

Đầu ra:

2017-05-25 

6
Câu trả lời này cực kỳ dễ bay hơi và do điếc, sẽ không hoạt động trên hầu hết các máy tính vì nó phụ thuộc hoàn toàn vào người dùng có định dạng ngày ngắn trong hệ thống của họ [trong cài đặt -> Ngày & Giờ trong Win10] được đặt thành 'YYYY-MM-DD . The default format for this is M / D / YYYY` và do đó, điều này cho đầu ra của Datehàm là 5/25/2017. Để sửa lỗi này, câu trả lời của bạn sẽ cần được gói trong một Formatcuộc gọi.
Taylor Scott

2
@TaylorScott đến đó ?format(now,"yyyy-mm-dd")sử dụng nowngắn hơndate
Greedo

1
@Greedo, đúng vậy. Theo hiểu biết của tôi, đây là cách ngắn nhất để đạt được mục tiêu này bằng cách sử dụng VBA
Taylor Scott

1
@TaylorScott cảm ơn vì đã chỉ ra điều này, tôi không nhận thức được sự phụ thuộc vào cài đặt ngày của hệ thống. Định dạng ngày này là mặc định trên PC của tôi và ở nước tôi nói chung, vì vậy tôi đã hơi quá tự tin ở đây.
Maciej Lipinski


1

QBIC , 33 byte

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

Giải trình:

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[}%'-*

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

-7 byte nhờ Challenger5.

Giải trình:

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

Bạn có thể sử dụng e[(mảng pad) cho 15 byte:et3<{sY0e[}%'-*
Esolanging Fruit

@ Challenger5 thật tuyệt. Cảm ơn
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

Cảm ơn @ConnorLSW cho 9 byte.


bạn có thể tiết kiệm rất nhiều ở đây. date -f 'yyyy-MM-dd'
colsw

Cảm ơn người đàn ông. Tôi mới đến Powershell. Vì vậy, tôi đã thử vận ​​may của mình ở đây
Sivaprasath Vadeels

@Shivaprasath V - không phải lo lắng, hãy kiểm tra chủ đề này để biết một vài bài viết hữu ích với các thủ thuật chơi golf PS cơ bản hơn nếu bạn muốn.
colsw


1

MATLAB / Octave , 25 15 byte

datestr(now,29)

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


Hàm tích hợp nowtrả về ngày hệ thống hiện tại ở định dạng nối tiếp MATLAB kỳ lạ.

datestrđịnh dạng định dạng nối tiếp kỳ lạ thành một chuỗi có định dạng được yêu cầu - trong trường hợp này 'YYYY-mm-dd'. Hóa ra MATLAB có một danh sách các định dạng được xác định trước cho datestr. ISO8601 là một trong số đó và được đại diện bởi số 29, cho phép tiết kiệm 10 byte.


1

Python 2 ,  53  40 byte

-10 byte nhờ Gábor Fekete (ISO-8601 là định dạng mặc định cho một đối tượng ngày)

from datetime import*
print date.today()

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

Làm sao?

datetime.date.today()sẽ trả về một datetime.dateđối tượng có chứa thông tin ngày địa phương.

printsẽ in một chuỗi đại diện của đối tượng đó, điều này sẽ gọi __str__hàm của đối tượng .

Từ các tài liệu :

  • date.__str__(): Đối với a date d, str(d)tương đương với d.isoformat().

  • date.isoformat(): Trả về một stringđại diện cho ngày ở định dạng ISO 8601 , ‘YYYY-MM-DD’. Ví dụ , date(2002, 12, 4).isoformat() == '2002-12-04'.


1
import datetime;print datetime.date.today()đây chỉ là 43 byte và sử dụng datetime. Tại sao phiên bản thậm chí ngắn hơn bị xóa?
Gábor Fekete

@ GáborFekete Cảm ơn (Tôi nghĩ rằng bạn thực sự nên đăng, nó đủ khác nhau). Câu trả lời khác có lẽ đã bị xóa vì nó không in chuỗi được định dạng chính xác. Tôi đã thêm một lời giải thích về lý do tại sao điều này thực sự hoạt động (miễn là một trong đó bao gồm print). Cứu ba người khác làm (cái ác) import*.
Jonathan Allan

Tôi muốn nhưng có một giải pháp khác thậm chí ngắn hơn của tôi nhưng đã bị xóa vì một số lý do.
Gábor Fekete

... hiện đã được chỉnh sửa để bao gồm cả printthời gian bị xóa sau đó không bị xóa.
Jonathan Allan


1

Rust, 84 byte

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

Đã lưu một byte nhờ @raznagul.


2
Tôi tải về ở Sytemđâu?
Erik the Outgolfer

6
@EriktheOutgolfer Đó là một trình bao bọc tùy chỉnh mà tôi đã tạo xung quanh Systemkhông gian tên vì tôi vẫn tiếp tục mắc lỗi chính tả ...
TheLethalCoder

4
Bạn biết những thứ bạn tạo cục bộ không được phép trên PPCG trừ khi nó được xuất bản trước khi câu hỏi được hỏi. : P
Erik the Outgolfer

1
@EriktheOutgolfer Chết tiệt, lần sau tôi cũng sẽ tạo một trình bao bọc ngắn hơn ...
TheLethalCoder

1
Vì các số 0 hàng đầu trong năm không bắt buộc, chuỗi định dạng "yyy-MM-dd"cũng sẽ hoạt động.
raznagul

1

Java 8, 26 32 byte

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

Đã sửa lỗi định dạng nhờ Kevin Cruijssen


Wow, Java thực sự rất ngắn ... Tôi chưa bao giờ nghĩ rằng mình sẽ thấy ngày: D
Beta Decay

@BetaDecay Nó ngắn, nhưng hiện tại không tuân thủ các quy tắc codegolf tiêu chuẩn. Nó phải là một chức năng thay vì một đoạn trích và nhập khẩu cần thiết cũng được tính. Vì vậy, nó nên được ()->java.time.LocalDate.now().toString()thay thế. Sau đó, một lần nữa, bạn có thể chơi golf .toString()để +"", vì vậy nó trở nên ()->java.time.LocalDate.now()+""trong tổng số ( 32 byte ).
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 đã chỉ ra cho tôi rằng tôi không cần tất cả các không gian

Kiểm tra tôi!


Bạn có thể loại bỏ một vài trong số những không gian đó?
Timtech

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.