Skip to content

Commit cb00cc2

Browse files
committed
Java 8 – Format Date, LocalDate, LocalDateTime and ZonedDateTime
1 parent fdca57e commit cb00cc2

File tree

3 files changed

+281
-0
lines changed

3 files changed

+281
-0
lines changed

java8-examples/pom.xml

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>com.howtoprogram</groupId>
8+
<artifactId>java8-examples</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
11+
12+
<properties>
13+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14+
<java.version>1.8</java.version>
15+
<junit.version>4.12</junit.version>
16+
17+
</properties>
18+
<build>
19+
<plugins>
20+
<plugin>
21+
<artifactId>maven-compiler-plugin</artifactId>
22+
<version>3.1</version>
23+
<configuration>
24+
<source>${java.version}</source>
25+
<target>${java.version}</target>
26+
</configuration>
27+
</plugin>
28+
</plugins>
29+
</build>
30+
31+
<dependencies>
32+
<dependency>
33+
<groupId>junit</groupId>
34+
<artifactId>junit</artifactId>
35+
<version>${junit.version}</version>
36+
<scope>test</scope>
37+
</dependency>
38+
39+
</dependencies>
40+
41+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
2+
3+
import org.junit.Test;
4+
5+
import java.time.Instant;
6+
import java.time.LocalDate;
7+
import java.time.LocalDateTime;
8+
import java.time.ZoneId;
9+
import java.util.Calendar;
10+
import java.util.Date;
11+
import java.util.GregorianCalendar;
12+
13+
import static org.junit.Assert.assertEquals;
14+
15+
public class Java8DateTimeTest {
16+
17+
@Test
18+
public void testConvertLocalDateToDate() {
19+
LocalDate localDate = LocalDate.of(2017, 8, 10);
20+
21+
22+
Date date = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
23+
24+
Calendar calendar = Calendar.getInstance();
25+
calendar.setTime(date);
26+
27+
assertEquals(localDate.getYear(), calendar.get(Calendar.YEAR));
28+
assertEquals(localDate.getMonth().getValue(), calendar.get(Calendar.MONTH) + 1);
29+
assertEquals(localDate.getDayOfMonth(), calendar.get(Calendar.DAY_OF_MONTH));
30+
}
31+
32+
@Test
33+
public void testConvertLocalDateTimeToDate() {
34+
LocalDateTime localDateTime = LocalDateTime.of(2017, 8, 10, 23, 10, 15);
35+
36+
37+
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
38+
39+
Calendar calendar = Calendar.getInstance();
40+
calendar.setTime(date);
41+
42+
assertEquals(localDateTime.getYear(), calendar.get(Calendar.YEAR));
43+
assertEquals(localDateTime.getMonth().getValue(), calendar.get(Calendar.MONTH) + 1);
44+
assertEquals(localDateTime.getDayOfMonth(), calendar.get(Calendar.DAY_OF_MONTH));
45+
}
46+
47+
@Test
48+
public void testConvertDateToLocalDate() {
49+
50+
Calendar calendar = new GregorianCalendar(2017, Calendar.AUGUST, 20);
51+
Date date = calendar.getTime();
52+
53+
54+
//Convert Date to LocalDate
55+
LocalDate localDate = Instant.ofEpochMilli(date.getTime()).atZone(
56+
ZoneId.systemDefault()).toLocalDate();
57+
58+
59+
assertEquals(calendar.get(Calendar.YEAR), localDate.getYear());
60+
assertEquals(calendar.get(Calendar.MONTH) + 1, localDate.getMonth()
61+
.getValue());
62+
assertEquals(calendar.get(Calendar.DAY_OF_MONTH), localDate.getDayOfMonth());
63+
64+
}
65+
66+
@Test
67+
public void testConvertDateToLocalDateTime() {
68+
Calendar calendar = new GregorianCalendar(2017, Calendar.AUGUST, 20);
69+
Date date = calendar.getTime();
70+
71+
72+
//Convert Date to LocalDateTime
73+
LocalDateTime localDateTime = Instant.ofEpochMilli(date.getTime()).atZone(ZoneId
74+
.systemDefault()).toLocalDateTime();
75+
76+
77+
assertEquals(calendar.get(Calendar.YEAR), localDateTime.getYear());
78+
assertEquals(calendar.get(Calendar.MONTH) + 1, localDateTime.getMonth()
79+
.getValue());
80+
assertEquals(calendar.get(Calendar.DAY_OF_MONTH), localDateTime.getDayOfMonth());
81+
assertEquals(calendar.get(Calendar.HOUR_OF_DAY), localDateTime.getHour());
82+
assertEquals(calendar.get(Calendar.MINUTE), localDateTime.getMinute());
83+
assertEquals(calendar.get(Calendar.SECOND), localDateTime.getSecond());
84+
85+
}
86+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
2+
3+
import org.junit.Test;
4+
5+
import java.text.SimpleDateFormat;
6+
import java.time.*;
7+
import java.time.format.DateTimeFormatter;
8+
import java.util.Calendar;
9+
import java.util.Date;
10+
import java.util.GregorianCalendar;
11+
import java.util.Locale;
12+
13+
import static java.time.format.DateTimeFormatter.*;
14+
import static org.junit.Assert.assertEquals;
15+
16+
17+
public class Java8FormatDate {
18+
19+
@Test
20+
public void testFormatDate() {
21+
22+
//create a date object by using Calendar
23+
Calendar calendar = new GregorianCalendar(2020, Calendar.AUGUST, 9);
24+
Date date = calendar.getTime();
25+
26+
//create a pattern
27+
String pattern = "dd/MM/yyyy";
28+
SimpleDateFormat dateFormatter = new SimpleDateFormat(pattern);
29+
// format the date
30+
String olympicDate = dateFormatter.format(date);
31+
//Validate
32+
assertEquals("09/08/2020", olympicDate);
33+
34+
}
35+
36+
@Test
37+
public void testFormatDateLongPattern() {
38+
//create a date
39+
int year = 2020;
40+
int month = Calendar.AUGUST;
41+
int day = 9;
42+
int hourOfDay = 23;
43+
int minute = 59;
44+
int second = 59;
45+
Calendar calendar = new GregorianCalendar(year, month, day, hourOfDay,
46+
minute, second);
47+
48+
Date date = calendar.getTime();
49+
50+
//create a long pattern with en_US locale
51+
String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSS";
52+
SimpleDateFormat dateFormatter =
53+
new SimpleDateFormat(pattern, new Locale("en", "US"));
54+
55+
//format the date
56+
String olympicDate = dateFormatter.format(date);
57+
58+
//validate
59+
assertEquals("Sunday August 2020 23:59:59.000", olympicDate);
60+
61+
}
62+
@Test
63+
public void testFormatLocalDate() {
64+
65+
//create a LocalDate object
66+
LocalDate date = LocalDate.of(2020, Month.AUGUST, 9);
67+
68+
//create a pattern
69+
String pattern = "dd/MM/yyyy";
70+
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
71+
72+
// format the date
73+
String olympicDate = formatter.format(date);
74+
75+
//Validate
76+
assertEquals("09/08/2020", olympicDate);
77+
78+
}
79+
@Test
80+
public void testFormatLocalDateUsingPreDefinedFormatter() {
81+
82+
//create a LocalDate object
83+
LocalDate date = LocalDate.of(2020, Month.AUGUST, 9);
84+
85+
// format the date
86+
String olympicDate = ISO_DATE.format(date);
87+
assertEquals("2020-08-09", olympicDate);
88+
89+
//or use as a pattern
90+
olympicDate = date.format(ISO_DATE);
91+
assertEquals("2020-08-09", olympicDate);
92+
93+
}
94+
@Test
95+
public void testFormatLocalDateTime() {
96+
97+
//create a LocalDate object
98+
LocalDateTime dt = LocalDateTime.of(2020, Month.AUGUST, 9, 23, 59, 59);
99+
100+
//create a pattern
101+
String pattern = "yyyy/MM/dd HH:mm:ss";
102+
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
103+
104+
// format the date
105+
String olympicDate = formatter.format(dt);
106+
assertEquals("2020/08/09 23:59:59", olympicDate);
107+
108+
}
109+
@Test
110+
public void testFormatLocalDateTimeUsingPreDefinedFormatters() {
111+
112+
//create a LocalDate object
113+
LocalDateTime dt = LocalDateTime.of(2020, Month.AUGUST, 9, 23, 59, 59);
114+
115+
// format the date
116+
String olympicDate = ISO_LOCAL_DATE_TIME.format(dt);
117+
assertEquals("2020-08-09T23:59:59", olympicDate);
118+
119+
// or using as a pattern
120+
olympicDate = dt.format(ISO_LOCAL_DATE_TIME);
121+
assertEquals("2020-08-09T23:59:59", olympicDate);
122+
123+
}
124+
125+
@Test
126+
public void testFormatZonedDateTime() {
127+
128+
//create a LocalDate object
129+
LocalDateTime dt = LocalDateTime.of(2020, Month.AUGUST, 9, 23, 59, 59);
130+
ZonedDateTime japanZonedDT = ZonedDateTime.of(dt, ZoneId.of("Asia/Tokyo"));
131+
// format the date
132+
String pattern = "yyyy/MM/dd HH:mm:ssXXX";
133+
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
134+
135+
String olympicDate = formatter.format(japanZonedDT);
136+
assertEquals("2020/08/09 23:59:59+09:00", olympicDate);
137+
138+
}
139+
@Test
140+
public void testFormatZonedDateTimeUsingPreDefinedFormatters() {
141+
142+
//create a LocalDate object
143+
LocalDateTime dt = LocalDateTime.of(2020, Month.AUGUST, 9, 23, 59, 59);
144+
ZonedDateTime japanZonedDT = ZonedDateTime.of(dt, ZoneId.of("Asia/Tokyo"));
145+
// format the date
146+
String olympicDate = ISO_OFFSET_DATE_TIME.format(japanZonedDT);
147+
assertEquals("2020-08-09T23:59:59+09:00", olympicDate);
148+
149+
// or using as a pattern
150+
olympicDate = japanZonedDT.format(ISO_OFFSET_DATE_TIME);
151+
assertEquals("2020-08-09T23:59:59+09:00", olympicDate);
152+
153+
}
154+
}

0 commit comments

Comments
 (0)