diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 68701c0c51..9b0082740f 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -33,6 +33,7 @@
+
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index f8b10f84d4..6fc7c0eec4 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -15,6 +15,8 @@
+
+
diff --git a/core-java-modules/core-java-8-datetime/README.md b/core-java-modules/core-java-8-datetime/README.md
index 03d2a9609d..77d3148ecb 100644
--- a/core-java-modules/core-java-8-datetime/README.md
+++ b/core-java-modules/core-java-8-datetime/README.md
@@ -1,8 +1,8 @@
-## Java 8+ Date and Time API
+## Java 8+ Date 和 Time API
-This module contains articles about the Date and Time API introduced with Java 8.
+本模块中包含的内容有关 Java 8 中使用日期和时间的 API。
-### Relevant Articles:
+### 相关文章:
- [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro)
- [Migrating to the New Java 8 Date Time API](http://www.baeldung.com/migrating-to-java-8-date-time-api)
- [Get the Current Date and Time in Java](https://www.baeldung.com/current-date-time-and-timestamp-in-java-8)
diff --git a/core-java-modules/core-java-8-datetime/pom.xml b/core-java-modules/core-java-8-datetime/pom.xml
index 8cf48fd467..01094bd688 100644
--- a/core-java-modules/core-java-8-datetime/pom.xml
+++ b/core-java-modules/core-java-8-datetime/pom.xml
@@ -8,9 +8,9 @@
core-java-8-datetime
- com.baeldung.core-java-modules
+ com.ossez.core-java-modules
core-java-modules
- 0.0.1-SNAPSHOT
+ 0.0.2-SNAPSHOT
diff --git a/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/CalendarUtils.java b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/CalendarUtils.java
new file mode 100644
index 0000000000..6f091ad50b
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/CalendarUtils.java
@@ -0,0 +1,14 @@
+package com.baeldung.datetime;
+
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Date;
+
+public class CalendarUtils {
+ public static Calendar getPlusDays(Date date, int amount) throws ParseException {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ calendar.add(Calendar.DAY_OF_YEAR, amount);
+ return calendar;
+ }
+}
diff --git a/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/DateUtils.java b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/DateUtils.java
new file mode 100644
index 0000000000..f03f38b10d
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/DateUtils.java
@@ -0,0 +1,19 @@
+package com.baeldung.datetime;
+
+import java.text.SimpleDateFormat;
+import java.text.ParseException;
+import java.util.Date;
+public class DateUtils {
+
+ public static Date getNow() {
+ return new Date();
+ }
+
+ public static Date getDate(long millis) {
+ return new Date(millis);
+ }
+
+ public static Date getDate(String dateAsString, String pattern) throws ParseException {
+ return new SimpleDateFormat(pattern).parse(dateAsString);
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/UseSimpleDateFormat.java b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/UseSimpleDateFormat.java
new file mode 100644
index 0000000000..a9c9bac92e
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/UseSimpleDateFormat.java
@@ -0,0 +1,15 @@
+package com.baeldung.datetime;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+public class UseSimpleDateFormat {
+
+ public String useFormat() {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
+ sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
+ Date date = new Date(1725437542000L);
+ return sdf.format(date);
+ }
+}
diff --git a/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/sql/DateUtils.java b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/sql/DateUtils.java
new file mode 100644
index 0000000000..1b4e825df8
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/sql/DateUtils.java
@@ -0,0 +1,21 @@
+package com.baeldung.datetime.sql;
+
+import java.sql.Date;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+public class DateUtils {
+
+ public static Date getNow() {
+ return new Date(System.currentTimeMillis());
+ }
+
+ public static Date getDate(String dateAsString) {
+ return Date.valueOf(dateAsString);
+ }
+
+ public static Date getDate(String dateAsString, String pattern) throws ParseException {
+ java.util.Date customUtilDate = new SimpleDateFormat(pattern).parse(dateAsString);
+ return new Date(customUtilDate.getTime());
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/sql/TimeUtils.java b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/sql/TimeUtils.java
new file mode 100644
index 0000000000..3fa1ffdef8
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/sql/TimeUtils.java
@@ -0,0 +1,21 @@
+package com.baeldung.datetime.sql;
+
+import java.sql.Time;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+public class TimeUtils {
+
+ public static Time getNow() {
+ return new Time(System.currentTimeMillis());
+ }
+
+ public static Time getTime(String timeAsString) {
+ return Time.valueOf(timeAsString);
+ }
+
+ public static Time getTime(String dateAsString, String pattern) throws ParseException {
+ java.util.Date customUtilDate = new SimpleDateFormat(pattern).parse(dateAsString);
+ return new Time(customUtilDate.getTime());
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/sql/TimestampUtils.java b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/sql/TimestampUtils.java
new file mode 100644
index 0000000000..02a928daa7
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/main/java/com/baeldung/datetime/sql/TimestampUtils.java
@@ -0,0 +1,21 @@
+package com.baeldung.datetime.sql;
+
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+public class TimestampUtils {
+
+ public static Timestamp getNow() {
+ return new Timestamp(System.currentTimeMillis());
+ }
+
+ public static Timestamp getTimestamp(String timestampAsString) {
+ return Timestamp.valueOf(timestampAsString);
+ }
+
+ public static Timestamp getTimestamp(String dateAsString, String pattern) throws ParseException {
+ java.util.Date customUtilDate = new SimpleDateFormat(pattern).parse(dateAsString);
+ return new Timestamp(customUtilDate.getTime());
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/CalendarUtilsUnitTest.java b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/CalendarUtilsUnitTest.java
new file mode 100644
index 0000000000..8c9ed695d7
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/CalendarUtilsUnitTest.java
@@ -0,0 +1,18 @@
+package com.baeldung.datetime;
+
+import org.junit.Test;
+
+import java.text.ParseException;
+import java.util.Date;
+
+import static org.junit.Assert.assertEquals;
+
+public class CalendarUtilsUnitTest {
+
+ @Test
+ public void givenDateAndDaysToAdd_thenCalendarIsCorrectlyReturned() throws ParseException {
+ Date initialDate = DateUtils.getDate("2020/01/01", "yyyy/MM/dd");
+ Date expectedDate= DateUtils.getDate("2020/01/11", "yyyy/MM/dd");
+ assertEquals(expectedDate, CalendarUtils.getPlusDays(initialDate, 10).getTime());
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/DateUtilsUnitTest.java b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/DateUtilsUnitTest.java
new file mode 100644
index 0000000000..76a40c5d70
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/DateUtilsUnitTest.java
@@ -0,0 +1,15 @@
+package com.baeldung.datetime;
+import org.junit.Test;
+
+import java.text.ParseException;
+import java.util.Date;
+
+import static org.junit.Assert.assertEquals;
+public class DateUtilsUnitTest {
+
+ @Test
+ public void givenDateAndPattern_thenDateIsCorrectlyReturned() throws ParseException {
+ long milliseconds = new Date(2020 - 1900, 0, 1).getTime();
+ assertEquals(DateUtils.getDate(milliseconds), DateUtils.getDate("2020/01/01", "yyyy/MM/dd"));
+ }
+}
diff --git a/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/UseSimpleDateFormatTest.java b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/UseSimpleDateFormatTest.java
new file mode 100644
index 0000000000..82ad9efe50
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/UseSimpleDateFormatTest.java
@@ -0,0 +1,13 @@
+package com.baeldung.datetime;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class UseSimpleDateFormatTest {
+ private UseSimpleDateFormat useSimpleDateFormat = new UseSimpleDateFormat();
+
+ @Test
+ public void givenValues_whenUsingFactoryOf_thenLocalTime() {
+ Assert.assertEquals("2024-09-04 13:42:22 +0530", useSimpleDateFormat.useFormat());
+ }
+}
diff --git a/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/sql/DateUtilsUnitTest.java b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/sql/DateUtilsUnitTest.java
new file mode 100644
index 0000000000..9ccaa9a845
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/sql/DateUtilsUnitTest.java
@@ -0,0 +1,21 @@
+package com.baeldung.datetime.sql;
+
+import static org.junit.Assert.assertEquals;
+
+import java.text.ParseException;
+import java.time.LocalDate;
+
+import org.junit.Test;
+
+public class DateUtilsUnitTest {
+
+ @Test(expected = IllegalArgumentException.class)
+ public void givenDateAsString_whenPatternIsNotRespected_thenExceptionIsThrown() {
+ DateUtils.getDate("2020 01 01");
+ }
+
+ @Test
+ public void givenDateAndPattern_thenDateIsCorrectlyReturned() throws ParseException {
+ assertEquals(DateUtils.getDate("2020-01-01"), DateUtils.getDate("2020/01/01", "yyyy/MM/dd"));
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/sql/TimeUtilsUnitTest.java b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/sql/TimeUtilsUnitTest.java
new file mode 100644
index 0000000000..e13c53bfbb
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/sql/TimeUtilsUnitTest.java
@@ -0,0 +1,22 @@
+package com.baeldung.datetime.sql;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.baeldung.datetime.sql.TimeUtils;
+
+import java.text.ParseException;
+
+public class TimeUtilsUnitTest {
+
+ @Test(expected = IllegalArgumentException.class)
+ public void givenTimeAsString_whenPatternIsNotRespected_thenExceptionIsThrown() {
+ TimeUtils.getTime("10 11 12");
+ }
+
+ @Test
+ public void givenTimeAndPattern_thenTimeIsCorrectlyReturned() throws ParseException {
+ assertEquals(TimeUtils.getTime("10:11:12"), TimeUtils.getTime("10 11 12", "hh mm ss"));
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/sql/TimestampUtilsUnitTest.java b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/sql/TimestampUtilsUnitTest.java
new file mode 100644
index 0000000000..836d0d55e7
--- /dev/null
+++ b/core-java-modules/core-java-8-datetime/src/test/java/com/baeldung/datetime/sql/TimestampUtilsUnitTest.java
@@ -0,0 +1,20 @@
+package com.baeldung.datetime.sql;
+
+import org.junit.Test;
+
+import java.text.ParseException;
+
+import static org.junit.Assert.assertEquals;
+
+public class TimestampUtilsUnitTest {
+
+ @Test(expected = IllegalArgumentException.class)
+ public void givenTimestampAsString_whenPatternIsNotRespected_thenExceptionIsThrown() {
+ TimestampUtils.getTimestamp("2020/01/01 10:11-12");
+ }
+
+ @Test
+ public void givenTimestampAndPattern_thenTimestampIsCorrectlyReturned() throws ParseException {
+ assertEquals(TimestampUtils.getTimestamp("2020-01-01 10:11:12"), TimestampUtils.getTimestamp("2020/01/01 10:11-12", "yyyy/MM/dd hh:mm-ss"));
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index f51d0308f1..1c517d7a77 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -17,6 +17,7 @@
core-java
core-java-8
+ core-java-8-datetime
core-java-9
core-java-11