Date format

From Rosetta Code

Jump to: navigation, search

Programming Task
This is a programming task. It lays out a problem which Rosetta Code users are encouraged to solve, using languages they know.

Code examples should be formatted along the lines of one of the existing prototypes.
This task has been clarified. Its programming examples are in need of review to ensure that they still fit the requirements of the task.

Display the current date in the formats of "2007-11-10" and "Sunday, November 10, 2007".

Contents

[edit] Ada

 
with Ada.Calendar;             use Ada.Calendar;
with Ada.Calendar.Formatting;  use Ada.Calendar.Formatting;
with Ada.Text_IO;              use Ada.Text_IO;
 
procedure Date_Format is
   function Image (Month : Month_Number) return String is
   begin
      case Month is
         when 1  => return "January";
         when 2  => return "February";
         when 3  => return "March";
         when 4  => return "April";
         when 5  => return "May";
         when 6  => return "June";
         when 7  => return "July";
         when 8  => return "August";
         when 9  => return "September";
         when 10 => return "October";
         when 11 => return "November";
         when 12 => return "December";
      end case;
   end Image;
   function Image (Day : Day_Name) return String is
   begin
      case Day is
         when Monday    => return "Monday";
         when Tuesday   => return "Tuesday";
         when Wednesday => return "Wednesday";
         when Thursday  => return "Thursday";
         when Friday    => return "Friday";
         when Saturday  => return "Saturday";
         when Sunday    => return "Sunday";
      end case;
   end Image;
   Today : Time := Clock;
begin
   Put_Line (Image (Today) (1..10));
   Put_Line
   (  Image (Day_Of_Week (Today)) & ", "
   &  Image (Ada.Calendar.Month (Today))
   &  Day_Number'Image (Ada.Calendar.Day (Today)) & ","
   &  Year_Number'Image (Ada.Calendar.Year (Today))
   );
end Date_Format;
 

Sample output:

2008-10-03
Friday, October 3, 2008

[edit] C

 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main() {
   time_t seconds;
   struct tm *now;
   seconds = time(NULL);
   now = localtime(&seconds);
   printf("%d-%d-%d\n", now->tm_year + 1900, now->tm_mon + 1, now->tm_mday);
   char *months[] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
   char *days[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
   printf("%s, %s %d, %d\n",days[now->tm_wday], months[now->tm_mon], now->tm_mday, now->tm_year + 1900);
 
   /* shortcut for default format */
   printf("%s", ctime(&seconds));
 
   return 0;
}
 

Sample output:

2008-10-7
Tuesday, October 7, 2008
Tue Oct  7 16:51:40 2008

[edit] ColdFusion

This example may be incorrect due to a recent change in the task requirements. Please verify it and remove this message. If the example does not match the requirements, replace this message with Template:incorrect or fix the code yourself.


<cfset date = createDate( 2007, 11, 10 ) />
#dateFormat( date, "YYYY-MM-DD" )#, #dateFormat( date, "DDDD, MMMM DD, YYYY" )#

[edit] D

This example may be incorrect due to a recent change in the task requirements. Please verify it and remove this message. If the example does not match the requirements, replace this message with Template:incorrect or fix the code yourself.


Works with: D version DMD 1.026

Library: Tango

module datetimedemo ;

import tango.time.Time ; 
import tango.text.locale.Locale ;
import tango.time.chrono.Gregorian ;

import tango.io.Stdout ;

void main() {
    Gregorian g = new Gregorian ;
    Stdout.layout = new Locale; // enable Stdout to handle date/time format
    Time d = g.toTime(2007, 11, 10, 0, 0, 0, 0, g.AD_ERA) ;
    Stdout.format("{:yyy-MM-dd}", d).newline ;
    Stdout.format("{:dddd, MMMM d, yyy}", d).newline ;
    d = g.toTime(2008, 2, 1, 0, 0, 0, 0, g.AD_ERA) ;
    Stdout.format("{:dddd, MMMM d, yyy}", d).newline ;
}

Sample Output:

2007-11-10
Saturday, November 10, 2007
Friday, February 1, 2008

[edit] Forth

: str-table
  create ( n -- ) 0 do , loop
  does>  ( n -- str len ) swap cells + @ count ;
 here ," December"
 here ," November"
 here ," October"
 here ," September"
 here ," August"
 here ," July"
 here ," June"
 here ," May"
 here ," April"
 here ," March"
 here ," February"
 here ," January"
12 str-table months

: .long-date
  time&date ( s m h D M Y )
  >R 1- months type space 1 .r [char] , emit space R> .
  drop drop drop ;
: .-0 ( n -- n )
  [char] - emit
  dup 10 < if [char] 0 emit then ;
: .short-date
  time&date  1 .r .-0 1 .r .-0 1 .r  drop drop drop ;

[edit] Haskell

import System.Locale
import System.Time

format1 :: CalendarTime -> String
format1 = formatCalendarTime defaultTimeLocale "%Y-%m-%e"

format2 :: CalendarTime -> String
format2 = formatCalendarTime defaultTimeLocale "%A, %B %d, %Y"

main = do
    t <- getClockTime >>= toCalendarTime
    mapM_ putStrLn [format1 t, format2 t]

[edit] J

dayNm  =: ;:'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'
monthNm=: ;:'0 January February March April May June July August September October November December'

dateFormat=: 3 : 0
 0 dateFormat y  NB. default to short format
:
 'year month date'=. 3{. y
 select. x
  case. 0 do.    NB. short format YYYY-MM-DD, e.g. '1900-02-28'
   dashNN=. (('-0' {.~ (3-#)) ,])@ ":
   (":year),(dashNN month),(dashNN date)

  case. 1 do.    NB. verbose format, e.g. 'Wednesday, February 28, 1900'
   Y=. year - A =. <. 12%~ 14-month
   M=. <.12%~31*(month+12*A)-2
   D=. 7| date+M+Y+(<.Y%4)+(<.Y%400)-(<.Y%100)
   (>D{dayNm), ', ',(>month{monthNm),' ',(":date), ', ', ":year
 end.
)

Example:

   (dateFormat ,: 1& dateFormat) 1920 12 17
1920-12-17               
Friday, December 17, 1920

[edit] Java

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.DateFormatSymbols;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class Dates{
	public static void main(String[] args){
		Calendar now = new GregorianCalendar(); //months are 0 indexed, dates are 1 indexed
		DateFormatSymbols symbols = new DateFormatSymbols(); //names for our months and weekdays

		//plain numbers way
		System.out.println(now.get(Calendar.YEAR)  + "-" + (now.get(Calendar.MONTH) + 1) + "-" + now.get(Calendar.DATE));

		//words way
		System.out.print(symbols.getWeekdays()[now.get(Calendar.DAY_OF_WEEK)] + ", ");
		System.out.print(symbols.getMonths()[now.get(Calendar.MONTH)] + " ");
		System.out.println(now.get(Calendar.DATE) + ", " + now.get(Calendar.YEAR));
		
		//using DateFormat
		Date date = new Date();
		DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println(format1.format(date));
		DateFormat format2 = new SimpleDateFormat("EEEE, MMMM dd, yyyy");
		System.out.println(format2.format(date));
	}
}

[edit] OCaml

This example may be incorrect due to a recent change in the task requirements. Please verify it and remove this message. If the example does not match the requirements, replace this message with Template:incorrect or fix the code yourself.


# #load "unix.cma";;
# open Unix;;
 
# let t = time() ;;
val t : float = 1219997516.
 
# let gmt = gmtime t ;;
val gmt : Unix.tm =
  {tm_sec = 56; tm_min = 11; tm_hour = 8; tm_mday = 29; tm_mon = 7;
   tm_year = 108; tm_wday = 5; tm_yday = 241; tm_isdst = false}
 
# Printf.sprintf "%d-%02d-%02d" (1900 + gmt.tm_year) (1 + gmt.tm_mon) gmt.tm_mday ;;
- : string = "2008-08-29"


let months = [| "January"; "February"; "March"; "April"; "May"; "June";
      "July"; "August"; "September"; "October"; "November"; "December" |] 
 
let days = [| "Sunday"; "Monday"; "Tuesday";  (* Sunday is 0 *)
      "Wednesday"; "Thursday"; "Friday"; "Saturday" |]
 
# Printf.sprintf "%s, %s %d, %d"
      days.(gmt.tm_wday)
      months.(gmt.tm_mon)
      gmt.tm_mday
      (1900 + gmt.tm_year) ;;
- : string = "Friday, August 29, 2008"

[edit] Perl

Library: POSIX

use POSIX;

print POSIX::strftime('%Y-%m-%d', 0, 0, 0, 10, 10, 107), "\n";
print POSIX::strftime('%A, %B %d, %Y', 0, 0, 0, 10, 10, 107), "\n";

Output with locales C:

2007-11-10
Saturday, November 10, 2007

Output with locales cs_CZ.UTF-8:

2007-11-10
Sobota, listopad 10, 2007

Actual date:

use POSIX;

print POSIX::strftime('%Y-%m-%d', localtime), "\n";
print POSIX::strftime('%A, %B %d, %Y', localtime), "\n";

Output with locales C:

2008-02-13
Wednesday, February 13, 2008

[edit] Python

Formatting rules: http://docs.python.org/lib/module-time.html (strftime)

import datetime
today = datetime.date.today()
# This one is built in:
print today.isoformat()
# Or use a format string for full flexibility:
print today.strftime('%Y-%m-%d')

[edit] Raven

time int as today

Short form:

today '%Y-%m-%d' date

Long form:

today '%A, %B %d, %Y' date

[edit] UNIX Shell

Works with: bash

Works with: tcsh

date +"%Y-%m-%d"
date +"%A, %B %d, %Y"
Personal tools