diff --git a/core-kotlin-2/.gitignore b/core-kotlin-2/.gitignore
deleted file mode 100644
index 0c017e8f8c..0000000000
--- a/core-kotlin-2/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
-/bin/
-
-#ignore gradle
-.gradle/
-
-
-#ignore build and generated files
-build/
-node/
-out/
-
-#ignore installed node modules and package lock file
-node_modules/
-package-lock.json
diff --git a/core-kotlin-2/README.md b/core-kotlin-2/README.md
deleted file mode 100644
index b0f17beb39..0000000000
--- a/core-kotlin-2/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## Core Kotlin
-
-This module contains articles about core Kotlin.
-
-### Relevant articles:
-
-- [Kotlin Ternary Conditional Operator](https://www.baeldung.com/kotlin-ternary-conditional-operator)
-- More articles: [[<-- prev]](/core-kotlin)
diff --git a/core-kotlin-2/build.gradle b/core-kotlin-2/build.gradle
deleted file mode 100644
index 1c52172404..0000000000
--- a/core-kotlin-2/build.gradle
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-group 'com.baeldung.ktor'
-version '1.0-SNAPSHOT'
-
-
-buildscript {
- ext.kotlin_version = '1.3.30'
-
- repositories {
- mavenCentral()
- }
- dependencies {
-
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- }
-}
-
-apply plugin: 'java'
-apply plugin: 'kotlin'
-apply plugin: 'application'
-
-mainClassName = 'APIServer.kt'
-
-sourceCompatibility = 1.8
-compileKotlin { kotlinOptions.jvmTarget = "1.8" }
-compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }
-
-repositories {
- mavenCentral()
- jcenter()
- maven { url "https://dl.bintray.com/kotlin/ktor" }
-}
-sourceSets {
- main{
- kotlin{
- srcDirs 'com/baeldung/ktor'
- }
- }
-}
-
-test {
- useJUnitPlatform()
- testLogging {
- events "passed", "skipped", "failed"
- }
-}
-
-dependencies {
- implementation "ch.qos.logback:logback-classic:1.2.1"
- implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlin_version}"
- testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2'
- testImplementation 'junit:junit:4.12'
- testImplementation 'org.assertj:assertj-core:3.12.2'
- testImplementation 'org.mockito:mockito-core:2.27.0'
- testImplementation "org.jetbrains.kotlin:kotlin-test:${kotlin_version}"
- testImplementation "org.jetbrains.kotlin:kotlin-test-junit5:${kotlin_version}"
-}
diff --git a/core-kotlin-2/gradle/wrapper/gradle-wrapper.jar b/core-kotlin-2/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 5c2d1cf016..0000000000
Binary files a/core-kotlin-2/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/core-kotlin-2/gradle/wrapper/gradle-wrapper.properties b/core-kotlin-2/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 5f1b1201a7..0000000000
--- a/core-kotlin-2/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/core-kotlin-2/gradlew b/core-kotlin-2/gradlew
deleted file mode 100644
index b0d6d0ab5d..0000000000
--- a/core-kotlin-2/gradlew
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
-exec "$JAVACMD" "$@"
diff --git a/core-kotlin-2/gradlew.bat b/core-kotlin-2/gradlew.bat
deleted file mode 100644
index 9991c50326..0000000000
--- a/core-kotlin-2/gradlew.bat
+++ /dev/null
@@ -1,100 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/core-kotlin-2/pom.xml b/core-kotlin-2/pom.xml
deleted file mode 100644
index be2f5fa68f..0000000000
--- a/core-kotlin-2/pom.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
- 4.0.0
- core-kotlin-2
- core-kotlin-2
- jar
-
-
- com.baeldung
- parent-kotlin
- 1.0.0-SNAPSHOT
- ../parent-kotlin
-
-
-
-
- org.jetbrains.kotlin
- kotlin-stdlib-jdk8
- ${kotlin.version}
-
-
- org.junit.jupiter
- junit-jupiter
- ${junit.jupiter.version}
- test
-
-
- org.mockito
- mockito-core
- ${mockito.version}
- test
-
-
- net.bytebuddy
- byte-buddy
- ${byte-buddy.version}
- test
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
- org.jetbrains.kotlin
- kotlin-test
- ${kotlin.version}
- test
-
-
- org.jetbrains.kotlin
- kotlin-test-junit5
- ${kotlin.version}
- test
-
-
-
-
-
-
- org.jetbrains.kotlin
- kotlin-maven-plugin
- ${kotlin.version}
-
-
- compile
- compile
-
- compile
-
-
-
- test-compile
- test-compile
-
- test-compile
-
-
-
-
- 1.8
-
-
-
-
-
-
- 1.3.30
- 5.4.2
- 2.27.0
- 1.9.12
- 3.10.0
-
-
-
diff --git a/core-kotlin-2/resources/logback.xml b/core-kotlin-2/resources/logback.xml
deleted file mode 100644
index 9452207268..0000000000
--- a/core-kotlin-2/resources/logback.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core-kotlin-2/settings.gradle b/core-kotlin-2/settings.gradle
deleted file mode 100644
index c91c993971..0000000000
--- a/core-kotlin-2/settings.gradle
+++ /dev/null
@@ -1,2 +0,0 @@
-rootProject.name = 'KtorWithKotlin'
-
diff --git a/core-kotlin-2/src/main/resources/logback.xml b/core-kotlin-2/src/main/resources/logback.xml
deleted file mode 100644
index 7d900d8ea8..0000000000
--- a/core-kotlin-2/src/main/resources/logback.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core-kotlin-2/src/test/resources/Kotlin.in b/core-kotlin-2/src/test/resources/Kotlin.in
deleted file mode 100644
index d140d4429e..0000000000
--- a/core-kotlin-2/src/test/resources/Kotlin.in
+++ /dev/null
@@ -1,5 +0,0 @@
-Hello to Kotlin. Its:
-1. Concise
-2. Safe
-3. Interoperable
-4. Tool-friendly
\ No newline at end of file
diff --git a/core-kotlin-2/src/test/resources/Kotlin.out b/core-kotlin-2/src/test/resources/Kotlin.out
deleted file mode 100644
index 63d15d2528..0000000000
--- a/core-kotlin-2/src/test/resources/Kotlin.out
+++ /dev/null
@@ -1,2 +0,0 @@
-Kotlin
-Concise, Safe, Interoperable, Tool-friendly
\ No newline at end of file
diff --git a/core-kotlin-modules/core-kotlin-2/README.md b/core-kotlin-modules/core-kotlin-2/README.md
new file mode 100644
index 0000000000..11593062c5
--- /dev/null
+++ b/core-kotlin-modules/core-kotlin-2/README.md
@@ -0,0 +1,8 @@
+## Core Kotlin 2
+
+This module contains articles about Kotlin core features.
+
+### Relevant articles:
+- [Working with Dates in Kotlin](https://www.baeldung.com/kotlin-dates)
+- [Kotlin Ternary Conditional Operator](https://www.baeldung.com/kotlin-ternary-conditional-operator)
+- [[<-- Prev]](/core-kotlin-modules/core-kotlin)
diff --git a/core-kotlin-modules/core-kotlin-2/pom.xml b/core-kotlin-modules/core-kotlin-2/pom.xml
new file mode 100644
index 0000000000..ae6e2d175a
--- /dev/null
+++ b/core-kotlin-modules/core-kotlin-2/pom.xml
@@ -0,0 +1,25 @@
+
+
+ 4.0.0
+ core-kotlin-2
+ core-kotlin-2
+ jar
+
+
+ com.baeldung.core-kotlin-modules
+ core-kotlin-modules
+ 1.0.0-SNAPSHOT
+
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
\ No newline at end of file
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseDuration.kt b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseDuration.kt
similarity index 90%
rename from core-kotlin/src/main/kotlin/com/baeldung/datetime/UseDuration.kt
rename to core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseDuration.kt
index 40fb161c08..922c3a1988 100644
--- a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseDuration.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseDuration.kt
@@ -1,4 +1,4 @@
-package com.baeldung.datetime
+package com.baeldung.dates.datetime
import java.time.Duration
import java.time.LocalTime
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDate.kt b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseLocalDate.kt
similarity index 96%
rename from core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDate.kt
rename to core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseLocalDate.kt
index 250c071bbe..81d50a70b2 100644
--- a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDate.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseLocalDate.kt
@@ -1,4 +1,4 @@
-package com.baeldung.datetime
+package com.baeldung.dates.datetime
import java.time.DayOfWeek
import java.time.LocalDate
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDateTime.kt b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseLocalDateTime.kt
similarity index 84%
rename from core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDateTime.kt
rename to core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseLocalDateTime.kt
index ab7bbfcee1..5d0eb6a911 100644
--- a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDateTime.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseLocalDateTime.kt
@@ -1,4 +1,4 @@
-package com.baeldung.datetime
+package com.baeldung.dates.datetime
import java.time.LocalDateTime
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalTime.kt b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseLocalTime.kt
similarity index 92%
rename from core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalTime.kt
rename to core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseLocalTime.kt
index 152515621f..24402467e8 100644
--- a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalTime.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseLocalTime.kt
@@ -1,6 +1,5 @@
-package com.baeldung.datetime
+package com.baeldung.dates.datetime
-import java.time.LocalDateTime
import java.time.LocalTime
import java.time.temporal.ChronoUnit
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UsePeriod.kt b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UsePeriod.kt
similarity index 90%
rename from core-kotlin/src/main/kotlin/com/baeldung/datetime/UsePeriod.kt
rename to core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UsePeriod.kt
index df66a3d546..d15e02eb37 100644
--- a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UsePeriod.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UsePeriod.kt
@@ -1,4 +1,4 @@
-package com.baeldung.datetime
+package com.baeldung.dates.datetime
import java.time.LocalDate
import java.time.Period
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseZonedDateTime.kt b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseZonedDateTime.kt
similarity index 88%
rename from core-kotlin/src/main/kotlin/com/baeldung/datetime/UseZonedDateTime.kt
rename to core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseZonedDateTime.kt
index fd1838bd2d..e2f3a207c4 100644
--- a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseZonedDateTime.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/main/kotlin/com/baeldung/dates/datetime/UseZonedDateTime.kt
@@ -1,4 +1,4 @@
-package com.baeldung.datetime
+package com.baeldung.dates.datetime
import java.time.LocalDateTime
import java.time.ZoneId
diff --git a/kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/CreateDateUnitTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/CreateDateUnitTest.kt
similarity index 96%
rename from kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/CreateDateUnitTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/CreateDateUnitTest.kt
index d52a2f0f19..af5e08ea2d 100644
--- a/kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/CreateDateUnitTest.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/CreateDateUnitTest.kt
@@ -1,34 +1,34 @@
-package com.baeldung.kotlin.dates
-
-import org.assertj.core.api.Assertions.assertThat
-import org.junit.jupiter.api.Test
-import java.time.LocalDate
-import java.time.format.DateTimeFormatter
-
-class CreateDateUnitTest {
-
- @Test
- fun givenString_whenDefaultFormat_thenCreated() {
-
- var date = LocalDate.parse("2018-12-31")
-
- assertThat(date).isEqualTo("2018-12-31")
- }
-
- @Test
- fun givenString_whenCustomFormat_thenCreated() {
-
- var formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
- var date = LocalDate.parse("31-12-2018", formatter)
-
- assertThat(date).isEqualTo("2018-12-31")
- }
-
- @Test
- fun givenYMD_whenUsingOf_thenCreated() {
- var date = LocalDate.of(2018, 12, 31)
-
- assertThat(date).isEqualTo("2018-12-31")
- }
-
+package com.baeldung.kotlin.dates
+
+import org.assertj.core.api.Assertions.assertThat
+import org.junit.jupiter.api.Test
+import java.time.LocalDate
+import java.time.format.DateTimeFormatter
+
+class CreateDateUnitTest {
+
+ @Test
+ fun givenString_whenDefaultFormat_thenCreated() {
+
+ var date = LocalDate.parse("2018-12-31")
+
+ assertThat(date).isEqualTo("2018-12-31")
+ }
+
+ @Test
+ fun givenString_whenCustomFormat_thenCreated() {
+
+ var formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
+ var date = LocalDate.parse("31-12-2018", formatter)
+
+ assertThat(date).isEqualTo("2018-12-31")
+ }
+
+ @Test
+ fun givenYMD_whenUsingOf_thenCreated() {
+ var date = LocalDate.of(2018, 12, 31)
+
+ assertThat(date).isEqualTo("2018-12-31")
+ }
+
}
\ No newline at end of file
diff --git a/kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/ExtractDateUnitTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/ExtractDateUnitTest.kt
similarity index 96%
rename from kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/ExtractDateUnitTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/ExtractDateUnitTest.kt
index ef3841752b..d297f4b6c3 100644
--- a/kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/ExtractDateUnitTest.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/ExtractDateUnitTest.kt
@@ -1,29 +1,29 @@
-package com.baeldung.kotlin.dates
-
-import org.assertj.core.api.Assertions.assertThat
-import org.junit.jupiter.api.Test
-import java.time.DayOfWeek
-import java.time.LocalDate
-import java.time.Month
-
-class ExtractDateUnitTest {
-
- @Test
- fun givenDate_thenExtractedYMD() {
- var date = LocalDate.parse("2018-12-31")
-
- assertThat(date.year).isEqualTo(2018)
- assertThat(date.month).isEqualTo(Month.DECEMBER)
- assertThat(date.dayOfMonth).isEqualTo(31)
- }
-
- @Test
- fun givenDate_thenExtractedEraDowDoy() {
- var date = LocalDate.parse("2018-12-31")
-
- assertThat(date.era.toString()).isEqualTo("CE")
- assertThat(date.dayOfWeek).isEqualTo(DayOfWeek.MONDAY)
- assertThat(date.dayOfYear).isEqualTo(365)
- }
-
+package com.baeldung.kotlin.dates
+
+import org.assertj.core.api.Assertions.assertThat
+import org.junit.jupiter.api.Test
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.Month
+
+class ExtractDateUnitTest {
+
+ @Test
+ fun givenDate_thenExtractedYMD() {
+ var date = LocalDate.parse("2018-12-31")
+
+ assertThat(date.year).isEqualTo(2018)
+ assertThat(date.month).isEqualTo(Month.DECEMBER)
+ assertThat(date.dayOfMonth).isEqualTo(31)
+ }
+
+ @Test
+ fun givenDate_thenExtractedEraDowDoy() {
+ var date = LocalDate.parse("2018-12-31")
+
+ assertThat(date.era.toString()).isEqualTo("CE")
+ assertThat(date.dayOfWeek).isEqualTo(DayOfWeek.MONDAY)
+ assertThat(date.dayOfYear).isEqualTo(365)
+ }
+
}
\ No newline at end of file
diff --git a/kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/FormatDateUnitTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/FormatDateUnitTest.kt
similarity index 96%
rename from kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/FormatDateUnitTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/FormatDateUnitTest.kt
index 11ff6ec9f0..f7ca414aee 100644
--- a/kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/FormatDateUnitTest.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/FormatDateUnitTest.kt
@@ -1,29 +1,29 @@
-package com.baeldung.kotlin.dates
-
-import org.assertj.core.api.Assertions.assertThat
-import org.junit.jupiter.api.Test
-import java.time.LocalDate
-import java.time.format.DateTimeFormatter
-
-class FormatDateUnitTest {
-
- @Test
- fun givenDate_whenDefaultFormat_thenFormattedString() {
-
- var date = LocalDate.parse("2018-12-31")
-
- assertThat(date.toString()).isEqualTo("2018-12-31")
- }
-
- @Test
- fun givenDate_whenCustomFormat_thenFormattedString() {
-
- var date = LocalDate.parse("2018-12-31")
-
- var formatter = DateTimeFormatter.ofPattern("dd-MMMM-yyyy")
- var formattedDate = date.format(formatter)
-
- assertThat(formattedDate).isEqualTo("31-December-2018")
- }
-
+package com.baeldung.kotlin.dates
+
+import org.assertj.core.api.Assertions.assertThat
+import org.junit.jupiter.api.Test
+import java.time.LocalDate
+import java.time.format.DateTimeFormatter
+
+class FormatDateUnitTest {
+
+ @Test
+ fun givenDate_whenDefaultFormat_thenFormattedString() {
+
+ var date = LocalDate.parse("2018-12-31")
+
+ assertThat(date.toString()).isEqualTo("2018-12-31")
+ }
+
+ @Test
+ fun givenDate_whenCustomFormat_thenFormattedString() {
+
+ var date = LocalDate.parse("2018-12-31")
+
+ var formatter = DateTimeFormatter.ofPattern("dd-MMMM-yyyy")
+ var formattedDate = date.format(formatter)
+
+ assertThat(formattedDate).isEqualTo("31-December-2018")
+ }
+
}
\ No newline at end of file
diff --git a/kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/PeriodDateUnitTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/PeriodDateUnitTest.kt
similarity index 96%
rename from kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/PeriodDateUnitTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/PeriodDateUnitTest.kt
index e6b66634d3..e8ca2971e8 100644
--- a/kotlin-libraries/src/test/kotlin/com/baeldung/kotlin/dates/PeriodDateUnitTest.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/PeriodDateUnitTest.kt
@@ -1,48 +1,48 @@
-package com.baeldung.kotlin.dates
-
-import org.assertj.core.api.Assertions.assertThat
-import org.junit.jupiter.api.Test
-import java.time.LocalDate
-import java.time.Period
-
-class PeriodDateUnitTest {
-
- @Test
- fun givenYMD_thenCreatePeriod() {
- var period = Period.of(1, 2, 3)
-
- assertThat(period.toString()).isEqualTo("P1Y2M3D")
- }
-
- @Test
- fun givenPeriod_whenAdd_thenModifiedDate() {
- var period = Period.of(1, 2, 3)
-
- var date = LocalDate.of(2018, 6, 25)
- var modifiedDate = date.plus(period)
-
- assertThat(modifiedDate).isEqualTo("2019-08-28")
- }
-
- @Test
- fun givenPeriod_whenSubtracted_thenModifiedDate() {
- var period = Period.of(1, 2, 3)
-
- var date = LocalDate.of(2018, 6, 25)
- var modifiedDate = date.minus(period)
-
- assertThat(modifiedDate).isEqualTo("2017-04-22")
- }
-
- @Test
- fun givenTwoDate_whenUsingBetween_thenDiffOfDates() {
-
- var date1 = LocalDate.parse("2018-06-25")
- var date2 = LocalDate.parse("2018-12-25")
-
- var period = Period.between(date1, date2)
-
- assertThat(period.toString()).isEqualTo("P6M")
- }
-
+package com.baeldung.kotlin.dates
+
+import org.assertj.core.api.Assertions.assertThat
+import org.junit.jupiter.api.Test
+import java.time.LocalDate
+import java.time.Period
+
+class PeriodDateUnitTest {
+
+ @Test
+ fun givenYMD_thenCreatePeriod() {
+ var period = Period.of(1, 2, 3)
+
+ assertThat(period.toString()).isEqualTo("P1Y2M3D")
+ }
+
+ @Test
+ fun givenPeriod_whenAdd_thenModifiedDate() {
+ var period = Period.of(1, 2, 3)
+
+ var date = LocalDate.of(2018, 6, 25)
+ var modifiedDate = date.plus(period)
+
+ assertThat(modifiedDate).isEqualTo("2019-08-28")
+ }
+
+ @Test
+ fun givenPeriod_whenSubtracted_thenModifiedDate() {
+ var period = Period.of(1, 2, 3)
+
+ var date = LocalDate.of(2018, 6, 25)
+ var modifiedDate = date.minus(period)
+
+ assertThat(modifiedDate).isEqualTo("2017-04-22")
+ }
+
+ @Test
+ fun givenTwoDate_whenUsingBetween_thenDiffOfDates() {
+
+ var date1 = LocalDate.parse("2018-06-25")
+ var date2 = LocalDate.parse("2018-12-25")
+
+ var period = Period.between(date1, date2)
+
+ assertThat(period.toString()).isEqualTo("P6M")
+ }
+
}
\ No newline at end of file
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateTimeUnitTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseLocalDateTimeUnitTest.kt
similarity index 92%
rename from core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateTimeUnitTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseLocalDateTimeUnitTest.kt
index 8f9f8374ed..f3615a527c 100644
--- a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateTimeUnitTest.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseLocalDateTimeUnitTest.kt
@@ -1,14 +1,12 @@
package com.baeldung.kotlin.datetime
-import com.baeldung.datetime.UseLocalDateTime
+import com.baeldung.dates.datetime.UseLocalDateTime
+import org.junit.Assert.assertEquals
+import org.junit.Test
import java.time.LocalDate
import java.time.LocalTime
import java.time.Month
-import org.junit.Test
-
-import org.junit.Assert.assertEquals
-
class UseLocalDateTimeUnitTest {
var useLocalDateTime = UseLocalDateTime()
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateUnitTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseLocalDateUnitTest.kt
similarity index 97%
rename from core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateUnitTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseLocalDateUnitTest.kt
index ac42e91c6c..e6353c9dab 100644
--- a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateUnitTest.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseLocalDateUnitTest.kt
@@ -1,6 +1,6 @@
package com.baeldung.kotlin.datetime
-import com.baeldung.datetime.UseLocalDate
+import com.baeldung.dates.datetime.UseLocalDate
import org.junit.Assert
import org.junit.Test
import java.time.DayOfWeek
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalTimeUnitTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseLocalTimeUnitTest.kt
similarity index 95%
rename from core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalTimeUnitTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseLocalTimeUnitTest.kt
index 83fc57f850..1afe03ca48 100644
--- a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalTimeUnitTest.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseLocalTimeUnitTest.kt
@@ -1,10 +1,9 @@
package com.baeldung.kotlin.datetime
-import com.baeldung.datetime.UseLocalTime
-import java.time.LocalTime
-
+import com.baeldung.dates.datetime.UseLocalTime
import org.junit.Assert
import org.junit.Test
+import java.time.LocalTime
class UseLocalTimeUnitTest {
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UsePeriodUnitTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UsePeriodUnitTest.kt
similarity index 94%
rename from core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UsePeriodUnitTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UsePeriodUnitTest.kt
index 48be72feb0..36e1e5533a 100644
--- a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UsePeriodUnitTest.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UsePeriodUnitTest.kt
@@ -1,11 +1,10 @@
package com.baeldung.kotlin.datetime
-import com.baeldung.datetime.UsePeriod
-import java.time.LocalDate
-import java.time.Period
-
+import com.baeldung.dates.datetime.UsePeriod
import org.junit.Assert
import org.junit.Test
+import java.time.LocalDate
+import java.time.Period
class UsePeriodUnitTest {
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseZonedDateTimeUnitTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseZonedDateTimeUnitTest.kt
similarity index 90%
rename from core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseZonedDateTimeUnitTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseZonedDateTimeUnitTest.kt
index a9d7d973ef..aa2cdaa4f3 100644
--- a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseZonedDateTimeUnitTest.kt
+++ b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/dates/datetime/UseZonedDateTimeUnitTest.kt
@@ -1,6 +1,6 @@
package com.baeldung.kotlin.datetime
-import com.baeldung.datetime.UseZonedDateTime
+import com.baeldung.dates.datetime.UseZonedDateTime
import org.junit.Assert
import org.junit.Test
import java.time.LocalDateTime
diff --git a/core-kotlin-2/src/test/kotlin/com/baeldung/ternary/TernaryOperatorTest.kt b/core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/ternary/TernaryOperatorTest.kt
similarity index 100%
rename from core-kotlin-2/src/test/kotlin/com/baeldung/ternary/TernaryOperatorTest.kt
rename to core-kotlin-modules/core-kotlin-2/src/test/kotlin/com/baeldung/ternary/TernaryOperatorTest.kt
diff --git a/core-kotlin-modules/core-kotlin/README.md b/core-kotlin-modules/core-kotlin/README.md
index 42f6486ad3..8815b0fadd 100644
--- a/core-kotlin-modules/core-kotlin/README.md
+++ b/core-kotlin-modules/core-kotlin/README.md
@@ -13,3 +13,4 @@ This module contains articles about Kotlin core features.
- [Implementing a Binary Tree in Kotlin](https://www.baeldung.com/kotlin-binary-tree)
- [JUnit 5 for Kotlin Developers](https://www.baeldung.com/junit-5-kotlin)
- [Converting Kotlin Data Class from JSON using GSON](https://www.baeldung.com/kotlin-json-convert-data-class)
+- [[More --> ]](/core-kotlin-modules/core-kotlin-2)
diff --git a/core-kotlin-modules/pom.xml b/core-kotlin-modules/pom.xml
index 304421ed20..24bdc189be 100644
--- a/core-kotlin-modules/pom.xml
+++ b/core-kotlin-modules/pom.xml
@@ -16,6 +16,7 @@
core-kotlin
+ core-kotlin-2
core-kotlin-advanced
core-kotlin-annotations
core-kotlin-collections
diff --git a/kotlin-libraries/README.md b/kotlin-libraries/README.md
index 99a57c8293..570bf9b1e5 100644
--- a/kotlin-libraries/README.md
+++ b/kotlin-libraries/README.md
@@ -10,7 +10,6 @@ This module contains articles about Kotlin Libraries.
- [Writing Specifications with Kotlin and Spek](https://www.baeldung.com/kotlin-spek)
- [Processing JSON with Kotlin and Klaxson](https://www.baeldung.com/kotlin-json-klaxson)
- [Guide to the Kotlin Exposed Framework](https://www.baeldung.com/kotlin-exposed-persistence)
-- [Working with Dates in Kotlin](https://www.baeldung.com/kotlin-dates)
- [Introduction to Arrow in Kotlin](https://www.baeldung.com/kotlin-arrow)
- [Kotlin with Ktor](https://www.baeldung.com/kotlin-ktor)
- [REST API With Kotlin and Kovert](https://www.baeldung.com/kotlin-kovert)
diff --git a/pom.xml b/pom.xml
index aeaef5f676..0eaa17cc21 100644
--- a/pom.xml
+++ b/pom.xml
@@ -839,7 +839,6 @@
parent-kotlin
core-kotlin
- core-kotlin-2
jenkins/plugins
jhipster
@@ -1372,7 +1371,6 @@
parent-kotlin
core-kotlin
- core-kotlin-2
jenkins/plugins
jhipster