Merge branch 'master' into PR-7319
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
package com.baeldung.jfrview;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class JFRExample {
|
||||
public static void main(String[] args) {
|
||||
JFRExample se = new JFRExample();
|
||||
se.insertToList(new ArrayList<>());
|
||||
}
|
||||
|
||||
private void insertToList(List<Object> list) {
|
||||
try {
|
||||
while (true) {
|
||||
list.add(new Object());
|
||||
}
|
||||
} catch (OutOfMemoryError e) {
|
||||
System.out.println("Out of Memory. Exiting");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,4 +9,5 @@
|
||||
- [Round the Date in Java](https://www.baeldung.com/java-round-the-date)
|
||||
- [Representing Furthest Possible Date in Java](https://www.baeldung.com/java-date-represent-max)
|
||||
- [Retrieving Unix Time in Java](https://www.baeldung.com/java-retrieve-unix-time)
|
||||
- [Calculate Months Between Two Dates in Java](https://www.baeldung.com/java-months-difference-two-dates)
|
||||
- [[<-- Prev]](/core-java-modules/core-java-datetime-java8-1)
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.baeldung.daterangeoverlap;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Calendar;
|
||||
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Interval;
|
||||
|
||||
public class DateRangeOverlapChecker {
|
||||
|
||||
public static boolean isOverlapUsingCalendarAndDuration(Calendar start1, Calendar end1, Calendar start2, Calendar end2) {
|
||||
long overlap = Math.min(end1.getTimeInMillis(), end2.getTimeInMillis()) - Math.max(start1.getTimeInMillis(), start2.getTimeInMillis());
|
||||
return overlap >= 0;
|
||||
}
|
||||
|
||||
public static boolean isOverlapUsingLocalDateAndDuration(LocalDate start1, LocalDate end1, LocalDate start2, LocalDate end2) {
|
||||
long overlap = Math.min(end1.toEpochDay(), end2.toEpochDay()) - Math.max(start1.toEpochDay(), start2.toEpochDay());
|
||||
return overlap >= 0;
|
||||
}
|
||||
|
||||
public static boolean isOverlapUsingJodaTime(DateTime start1, DateTime end1, DateTime start2, DateTime end2) {
|
||||
Interval interval1 = new Interval(start1, end1);
|
||||
Interval interval2 = new Interval(start2, end2);
|
||||
return interval1.overlaps(interval2);
|
||||
}
|
||||
|
||||
public static boolean isOverlapUsingCalendarAndCondition(Calendar start1, Calendar end1, Calendar start2, Calendar end2) {
|
||||
return !(end1.before(start2) || start1.after(end2));
|
||||
}
|
||||
|
||||
public static boolean isOverlapUsingLocalDateAndCondition(LocalDate start1, LocalDate end1, LocalDate start2, LocalDate end2) {
|
||||
return !(end1.isBefore(start2) || start1.isAfter(end2));
|
||||
}
|
||||
|
||||
public static boolean isOverlapUsingCalendarAndFindMin(Calendar start1, Calendar end1, Calendar start2, Calendar end2) {
|
||||
long overlap1 = Math.min(end1.getTimeInMillis() - start1.getTimeInMillis(), end1.getTimeInMillis() - start2.getTimeInMillis());
|
||||
long overlap2 = Math.min(end2.getTimeInMillis() - start2.getTimeInMillis(), end2.getTimeInMillis() - start1.getTimeInMillis());
|
||||
return Math.min(overlap1, overlap2) / (24 * 60 * 60 * 1000) >= 0;
|
||||
}
|
||||
|
||||
public static boolean isOverlapUsingLocalDateAndFindMin(LocalDate start1, LocalDate end1, LocalDate start2, LocalDate end2) {
|
||||
long overlap1 = Math.min(end1.toEpochDay() - start1.toEpochDay(), end1.toEpochDay() - start2.toEpochDay());
|
||||
long overlap2 = Math.min(end2.toEpochDay() - start2.toEpochDay(), end2.toEpochDay() - start1.toEpochDay());
|
||||
return Math.min(overlap1, overlap2) >= 0;
|
||||
}
|
||||
}
|
||||
+158
@@ -0,0 +1,158 @@
|
||||
package com.baeldung.daterangeoverlap;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Calendar;
|
||||
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Test;
|
||||
|
||||
public class DateRangeOverlapCheckerUnitTest {
|
||||
|
||||
@Test
|
||||
public void givenPartialOverlappingRanges_thenReturnsTrue() {
|
||||
Calendar start1 = Calendar.getInstance();
|
||||
start1.set(2024, 11, 15);
|
||||
Calendar end1 = Calendar.getInstance();
|
||||
end1.set(2024, 11, 20);
|
||||
|
||||
Calendar start2 = Calendar.getInstance();
|
||||
start2.set(2024, 11, 18);
|
||||
Calendar end2 = Calendar.getInstance();
|
||||
end2.set(2024, 11, 22);
|
||||
|
||||
LocalDate startLD1 = LocalDate.of(2024, 12, 15);
|
||||
LocalDate endLD1 = LocalDate.of(2024, 12, 20);
|
||||
|
||||
LocalDate startLD2 = LocalDate.of(2024, 12, 18);
|
||||
LocalDate endLD2 = LocalDate.of(2024, 12, 22);
|
||||
|
||||
DateTime startJT1 = new DateTime(2024, 12, 15, 0, 0);
|
||||
DateTime endJT1 = new DateTime(2024, 12, 20, 0, 0);
|
||||
|
||||
DateTime startJT2 = new DateTime(2024, 12, 18, 0, 0);
|
||||
DateTime endJT2 = new DateTime(2024, 12, 22, 0, 0);
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndDuration(start1, end1, start2, end2));
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndDuration(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndCondition(start1, end1, start2, end2));
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndCondition(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndFindMin(start1, end1, start2, end2));
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndFindMin(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingJodaTime(startJT1, endJT1, startJT2, endJT2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenFullOverlappingRanges_thenReturnsTrue() {
|
||||
Calendar start1 = Calendar.getInstance();
|
||||
start1.set(2024, 11, 15);
|
||||
Calendar end1 = Calendar.getInstance();
|
||||
end1.set(2024, 11, 20);
|
||||
|
||||
Calendar start2 = Calendar.getInstance();
|
||||
start2.set(2024, 11, 16);
|
||||
Calendar end2 = Calendar.getInstance();
|
||||
end2.set(2024, 11, 18);
|
||||
|
||||
LocalDate startLD1 = LocalDate.of(2024, 12, 15);
|
||||
LocalDate endLD1 = LocalDate.of(2024, 12, 20);
|
||||
|
||||
LocalDate startLD2 = LocalDate.of(2024, 12, 16);
|
||||
LocalDate endLD2 = LocalDate.of(2024, 12, 18);
|
||||
|
||||
DateTime startJT1 = new DateTime(2024, 12, 15, 0, 0);
|
||||
DateTime endJT1 = new DateTime(2024, 12, 20, 0, 0);
|
||||
|
||||
DateTime startJT2 = new DateTime(2024, 12, 16, 0, 0);
|
||||
DateTime endJT2 = new DateTime(2024, 12, 18, 0, 0);
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndDuration(start1, end1, start2, end2));
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndDuration(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndCondition(start1, end1, start2, end2));
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndCondition(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndFindMin(start1, end1, start2, end2));
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndFindMin(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingJodaTime(startJT1, endJT1, startJT2, endJT2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenConsecutiveRanges_thenReturnsFalse() {
|
||||
Calendar start1 = Calendar.getInstance();
|
||||
start1.set(2024, 11, 15);
|
||||
Calendar end1 = Calendar.getInstance();
|
||||
end1.set(2024, 11, 20);
|
||||
|
||||
Calendar start2 = Calendar.getInstance();
|
||||
start2.set(2024, 11, 21);
|
||||
Calendar end2 = Calendar.getInstance();
|
||||
end2.set(2024, 11, 24);
|
||||
|
||||
LocalDate startLD1 = LocalDate.of(2024, 12, 15);
|
||||
LocalDate endLD1 = LocalDate.of(2024, 12, 20);
|
||||
|
||||
LocalDate startLD2 = LocalDate.of(2024, 12, 21);
|
||||
LocalDate endLD2 = LocalDate.of(2024, 12, 24);
|
||||
|
||||
DateTime startJT1 = new DateTime(2024, 12, 15, 0, 0);
|
||||
DateTime endJT1 = new DateTime(2024, 12, 20, 0, 0);
|
||||
|
||||
DateTime startJT2 = new DateTime(2024, 12, 21, 0, 0);
|
||||
DateTime endJT2 = new DateTime(2024, 12, 24, 0, 0);
|
||||
|
||||
assertFalse(DateRangeOverlapChecker.isOverlapUsingCalendarAndDuration(start1, end1, start2, end2));
|
||||
assertFalse(DateRangeOverlapChecker.isOverlapUsingLocalDateAndDuration(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertFalse(DateRangeOverlapChecker.isOverlapUsingCalendarAndCondition(start1, end1, start2, end2));
|
||||
assertFalse(DateRangeOverlapChecker.isOverlapUsingLocalDateAndCondition(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertFalse(DateRangeOverlapChecker.isOverlapUsingCalendarAndFindMin(start1, end1, start2, end2));
|
||||
assertFalse(DateRangeOverlapChecker.isOverlapUsingLocalDateAndFindMin(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertFalse(DateRangeOverlapChecker.isOverlapUsingJodaTime(startJT1, endJT1, startJT2, endJT2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenZeroRangeRanges_thenReturnsTrue() {
|
||||
Calendar start1 = Calendar.getInstance();
|
||||
start1.set(2024, 11, 15);
|
||||
Calendar end1 = Calendar.getInstance();
|
||||
end1.set(2024, 11, 20);
|
||||
|
||||
Calendar start2 = Calendar.getInstance();
|
||||
start2.set(2024, 11, 20);
|
||||
Calendar end2 = Calendar.getInstance();
|
||||
end2.set(2024, 11, 20);
|
||||
|
||||
LocalDate startLD1 = LocalDate.of(2024, 12, 15);
|
||||
LocalDate endLD1 = LocalDate.of(2024, 12, 20);
|
||||
|
||||
LocalDate startLD2 = LocalDate.of(2024, 12, 20);
|
||||
LocalDate endLD2 = LocalDate.of(2024, 12, 20);
|
||||
|
||||
DateTime startJT1 = new DateTime(2024, 12, 15, 0, 0);
|
||||
DateTime endJT1 = new DateTime(2024, 12, 20, 0, 0);
|
||||
|
||||
DateTime startJT2 = new DateTime(2024, 12, 20, 0, 0);
|
||||
DateTime endJT2 = new DateTime(2024, 12, 20, 0, 0);
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndDuration(start1, end1, start2, end2));
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndDuration(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndCondition(start1, end1, start2, end2));
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndCondition(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingCalendarAndFindMin(start1, end1, start2, end2));
|
||||
assertTrue(DateRangeOverlapChecker.isOverlapUsingLocalDateAndFindMin(startLD1, endLD1, startLD2, endLD2));
|
||||
|
||||
//the overlaps method considers two intervals as overlapping only if they have a non-zero duration.
|
||||
assertFalse(DateRangeOverlapChecker.isOverlapUsingJodaTime(startJT1, endJT1, startJT2, endJT2));
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.baeldung.zoneoffsetandzoneidof;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.ZonedDateTime;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class ZoneOffSetAndZoneIdOfUnitTest {
|
||||
|
||||
@Test
|
||||
public void givenOffsetDateTimeWithUTCZoneOffset_thenOffsetShouldBeUTC() {
|
||||
OffsetDateTime dateTimeWithOffset = OffsetDateTime.now(ZoneOffset.UTC);
|
||||
assertEquals(dateTimeWithOffset.getOffset(), ZoneOffset.UTC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenZonedDateTimeWithUTCZoneId_thenZoneShouldBeUTC() {
|
||||
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
|
||||
assertEquals(zonedDateTime.getZone(), ZoneId.of("UTC"));
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.baeldung.array.conversions;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class ByteArrayToPrimitiveByteArrayUnitTest {
|
||||
private static final byte[] EXPECTED_ARRAY_VALUES = {65, 66, 67, 68};
|
||||
private static final Byte[] BYTE_ARRAY = {65, 66, 67, 68};
|
||||
|
||||
@Test
|
||||
public void givenByteArray_whenConvertingUsingByteValue_thenGiveExpectedResult() {
|
||||
byte[] newByteArray = new byte[BYTE_ARRAY.length];
|
||||
for (int i = 0; i < BYTE_ARRAY.length; i++) {
|
||||
newByteArray[i] = BYTE_ARRAY[i].byteValue();
|
||||
}
|
||||
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenByteArray_whenConvertingUsingUnboxing_thenGiveExpectedResult() {
|
||||
byte[] newByteArray = new byte[BYTE_ARRAY.length];
|
||||
for (int i = 0; i < BYTE_ARRAY.length; i++) {
|
||||
newByteArray[i] = BYTE_ARRAY[i];
|
||||
}
|
||||
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenByteArray_whenConvertingArrayUtils_thenGiveExpectedResult() {
|
||||
byte[] newByteArray = ArrayUtils.toPrimitive(BYTE_ARRAY);
|
||||
|
||||
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
|
||||
}
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package com.baeldung.array.conversions;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class PrimitiveByteArrayToByteArrayUnitTest {
|
||||
private static final byte[] PRIMITIVE_BYTE_ARRAY = {65, 66, 67, 68};
|
||||
private static final Byte[] EXPECTED_ARRAY_VALUES = {65, 66, 67, 68};
|
||||
|
||||
@Test
|
||||
public void givenPrimitiveByteArray_whenConvertingUsingByteValueOf_thenGiveExpectedResult() {
|
||||
Byte[] newByteArray = new Byte[PRIMITIVE_BYTE_ARRAY.length];
|
||||
for (int i = 0; i < PRIMITIVE_BYTE_ARRAY.length; i++) {
|
||||
newByteArray[i] = Byte.valueOf(PRIMITIVE_BYTE_ARRAY[i]);
|
||||
}
|
||||
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenPrimitiveByteArray_whenConvertingUsingAutoboxing_thenGiveExpectedResult() {
|
||||
Byte[] newByteArray = new Byte[PRIMITIVE_BYTE_ARRAY.length];
|
||||
for (int i = 0; i < PRIMITIVE_BYTE_ARRAY.length; i++) {
|
||||
newByteArray[i] = PRIMITIVE_BYTE_ARRAY[i];
|
||||
}
|
||||
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenPrimitiveByteArray_whenConvertingUsingAutoboxingAndArraysSetAll_thenGiveExpectedResult() {
|
||||
Byte[] newByteArray = new Byte[PRIMITIVE_BYTE_ARRAY.length];
|
||||
Arrays.setAll(newByteArray, n -> PRIMITIVE_BYTE_ARRAY[n]);
|
||||
|
||||
assertThat(newByteArray)
|
||||
.containsExactly(EXPECTED_ARRAY_VALUES);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenPrimitiveByteArray_whenConvertingUsingArrayUtils_thenGiveExpectedResult() {
|
||||
Byte[] newByteArray = ArrayUtils.toObject(PRIMITIVE_BYTE_ARRAY);
|
||||
|
||||
assertThat(newByteArray).containsExactly(EXPECTED_ARRAY_VALUES);
|
||||
}
|
||||
}
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
package com.baeldung.unicodechar;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class UnicodeCharFromCodePointHexStringUnitTest {
|
||||
private static final String U_CHECK = "✅"; // U+2705
|
||||
private static final String U_STRONG = "强"; // U+5F3A
|
||||
|
||||
|
||||
@Test
|
||||
void whenEscapeUAndNumberInString_thenGetExpectedUnicodeStr() {
|
||||
String check = "\u2705";
|
||||
assertEquals(U_CHECK, check);
|
||||
|
||||
String strong = "\u5F3A";
|
||||
assertEquals(U_STRONG, strong);
|
||||
|
||||
// "A" U+0041
|
||||
assertEquals("A", "\u0041");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
void whenConcatUAndNumberAsString_thenDoNotGetExpectedUnicodeStr() {
|
||||
String check = "\\u" + "2705";
|
||||
assertEquals("\\u2705", check);
|
||||
|
||||
String strong = "\\u" + "5F3A";
|
||||
assertEquals("\\u5F3A", strong);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
void whenCastHexCodePointToCharAndConvertCharToString_thenGetExpectedUnicodeStr() {
|
||||
|
||||
int codePoint = Integer.parseInt("2705", 16); //Decimal int: 9989
|
||||
char[] checkChar = Character.toChars(codePoint);
|
||||
String check = String.valueOf(checkChar);
|
||||
assertEquals(U_CHECK, check);
|
||||
|
||||
// For Java 11 and later versions
|
||||
// assertEquals(U_CHECK, Character.toString(codePoint));
|
||||
|
||||
codePoint = Integer.parseInt("5F3A", 16); //Decimal int: 24378
|
||||
char[] strongChar = Character.toChars(codePoint);
|
||||
String strong = String.valueOf(strongChar);
|
||||
assertEquals(U_STRONG, strong);
|
||||
|
||||
// For Java 11 and later versions
|
||||
// assertEquals(U_STRONG, Character.toString(codePoint));
|
||||
}
|
||||
|
||||
String stringFromCodePointHex(String codePointHex) {
|
||||
int codePoint = Integer.parseInt(codePointHex, 16);
|
||||
|
||||
// For Java 11 and later versions: return Character.toString(codePoint)
|
||||
|
||||
char[] chars = Character.toChars(codePoint);
|
||||
return String.valueOf(chars);
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenUsingstringFromCodePointHex_thenGetExpectedUnicodeStr() {
|
||||
assertEquals("A", stringFromCodePointHex("0041"));
|
||||
assertEquals(U_CHECK, stringFromCodePointHex("2705"));
|
||||
assertEquals(U_STRONG, stringFromCodePointHex("5F3A"));
|
||||
}
|
||||
}
|
||||
@@ -11,4 +11,6 @@
|
||||
- [Intro to Vector Class in Java](https://www.baeldung.com/java-vector-guide)
|
||||
- [HashSet toArray() Method in Java](https://www.baeldung.com/java-hashset-toarray)
|
||||
- [Time Complexity of Java Collections Sort in Java](https://www.baeldung.com/java-time-complexity-collections-sort)
|
||||
- [Check if List Contains at Least One Enum](https://www.baeldung.com/java-list-check-enum-presence)
|
||||
- [Comparison of for Loops and Iterators](https://www.baeldung.com/java-for-loops-vs-iterators)
|
||||
- More articles: [[<-- prev]](/core-java-modules/core-java-collections-4)
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.baeldung.priorityqueueiterator;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
public class Person {
|
||||
String name;
|
||||
int age;
|
||||
|
||||
public Person(String name, int age) {
|
||||
this.name = name;
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getAge() {
|
||||
return age;
|
||||
}
|
||||
|
||||
public void setAge(int age) {
|
||||
this.age = age;
|
||||
}
|
||||
}
|
||||
|
||||
class PersonAgeComparator implements Comparator<Person> {
|
||||
@Override
|
||||
public int compare(Person p1, Person p2) {
|
||||
return p1.age - p2.age; // Ascending order
|
||||
}
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
package com.baeldung.priorityqueueiterator;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.PriorityQueue;
|
||||
|
||||
public class PriorityQueueMain {
|
||||
|
||||
public static void main(String[] args) {
|
||||
showPriorityQueueWithIterator();
|
||||
showCustomOrderingWithIterator();
|
||||
showCustomOrderingWithPoll();
|
||||
useIteratorToCapitalizeNames();
|
||||
showFailFastIteratorBehavior();
|
||||
}
|
||||
|
||||
public static void showPriorityQueueWithIterator() {
|
||||
PriorityQueue<Integer> queue = new PriorityQueue<>();
|
||||
queue.add(3);
|
||||
queue.add(1);
|
||||
queue.add(2);
|
||||
|
||||
Iterator<Integer> iterator = queue.iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
Integer element = iterator.next();
|
||||
System.out.println(element);
|
||||
}
|
||||
}
|
||||
|
||||
public static void showFailFastIteratorBehavior() {
|
||||
PriorityQueue<Integer> numbers = new PriorityQueue<>();
|
||||
numbers.add(3);
|
||||
numbers.add(1);
|
||||
numbers.add(2);
|
||||
|
||||
Iterator<Integer> iterator = numbers.iterator();
|
||||
numbers.add(4);
|
||||
|
||||
try {
|
||||
while (iterator.hasNext()) {
|
||||
System.out.println(iterator.next());
|
||||
}
|
||||
} catch (java.util.ConcurrentModificationException e) {
|
||||
System.out.println("ConcurrentModificationException occurred during iteration.");
|
||||
}
|
||||
}
|
||||
|
||||
public static void showCustomOrderingWithIterator() {
|
||||
// Creating a PriorityQueue with a custom comparator
|
||||
PriorityQueue<Person> priorityQueue = new PriorityQueue<>(new PersonAgeComparator());
|
||||
|
||||
// Adding persons to the PriorityQueue
|
||||
priorityQueue.add(new Person("Alice", 25));
|
||||
priorityQueue.add(new Person("Bob", 30));
|
||||
priorityQueue.add(new Person("Charlie", 22));
|
||||
|
||||
Iterator<Person> iterator = priorityQueue.iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
Person person = iterator.next();
|
||||
System.out.println("Name: " + person.name + ", Age: " + person.age);
|
||||
}
|
||||
}
|
||||
|
||||
public static void showCustomOrderingWithPoll() {
|
||||
PriorityQueue<Person> priorityQueue = new PriorityQueue<>(new PersonAgeComparator());
|
||||
|
||||
priorityQueue.add(new Person("Alice", 25));
|
||||
priorityQueue.add(new Person("Bob", 30));
|
||||
priorityQueue.add(new Person("Charlie", 22));
|
||||
|
||||
Iterator<Person> iterator = priorityQueue.iterator();
|
||||
|
||||
while (!priorityQueue.isEmpty()) {
|
||||
Person person = priorityQueue.poll();
|
||||
System.out.println("Name: " + person.name + ", Age: " + person.age);
|
||||
}
|
||||
}
|
||||
|
||||
public static void useIteratorToCapitalizeNames() {
|
||||
PriorityQueue<Person> priorityQueue = new PriorityQueue<>(new PersonAgeComparator());
|
||||
|
||||
priorityQueue.add(new Person("Alice", 25));
|
||||
priorityQueue.add(new Person("Bob", 30));
|
||||
priorityQueue.add(new Person("Charlie", 22));
|
||||
|
||||
Iterator<Person> iterator = priorityQueue.iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
Person person = iterator.next();
|
||||
person.setName(person.getName()
|
||||
.toUpperCase());
|
||||
System.out.println("Name: " + person.name + ", Age: " + person.age);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,2 +1,5 @@
|
||||
## Relevant Articles
|
||||
- [Check if a List Contains a String Element While Ignoring Case](https://www.baeldung.com/java-list-search-case-insensitive)
|
||||
- [Removing the Last Node in a Linked List](https://www.baeldung.com/java-linked-list-remove-last-element)
|
||||
- [Call a Method on Each Element of a List in Java](https://www.baeldung.com/java-call-method-each-list-item)
|
||||
- [Sorting One List Based on Another List in Java](https://www.baeldung.com/java-sorting-one-list-using-another)
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.baeldung.resetlistiterator;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
|
||||
public class ResetListIteratorUnitTest {
|
||||
|
||||
private static final List<String> MY_LIST = List.of("A", "B", "C", "D", "E", "F", "G");
|
||||
|
||||
@Test
|
||||
void whenRecreateAnListIterator_thenGetTheExpectedResult() {
|
||||
ListIterator<String> lit = MY_LIST.listIterator();
|
||||
lit.next();
|
||||
lit.next();
|
||||
lit.next();
|
||||
lit.next();
|
||||
|
||||
lit = MY_LIST.listIterator();
|
||||
|
||||
assertFalse(lit.hasPrevious());
|
||||
assertEquals("A", lit.next());
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenBackwardIterationToTheFirst_thenGetTheExpectedResult() {
|
||||
ListIterator<String> lit = MY_LIST.listIterator();
|
||||
lit.next();
|
||||
lit.next();
|
||||
lit.next();
|
||||
lit.next();
|
||||
|
||||
|
||||
while (lit.hasPrevious()) {
|
||||
lit.previous();
|
||||
}
|
||||
|
||||
assertFalse(lit.hasPrevious());
|
||||
assertEquals("A", lit.next());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,4 +12,5 @@ This module contains articles about basic Java concurrency
|
||||
- [How to Get the Number of Threads in a Java Process](https://www.baeldung.com/java-get-number-of-threads)
|
||||
- [Set the Name of a Thread in Java](https://www.baeldung.com/java-set-thread-name)
|
||||
- [Thread vs. Single Thread Executor Service](https://www.baeldung.com/java-single-thread-executor-service)
|
||||
- [Difference Between a Future and a Promise in Java](https://www.baeldung.com/java-future-vs-promise-comparison)
|
||||
- [[<-- Prev]](../core-java-concurrency-basic)[[Next -->]](../core-java-concurrency-basic-3)
|
||||
|
||||
@@ -13,4 +13,5 @@ This module contains articles about basic Java concurrency.
|
||||
- [Retry Logic with CompletableFuture](https://www.baeldung.com/java-completablefuture-retry-logic)
|
||||
- [Convert From List of CompletableFuture to CompletableFuture List](https://www.baeldung.com/java-completablefuture-list-convert)
|
||||
- [Synchronize a Static Variable Among Different Threads](https://www.baeldung.com/java-synchronize-static-variable-different-threads)
|
||||
- [Difference Between execute() and submit() in Executor Service](https://www.baeldung.com/java-execute-vs-submit-executor-service)
|
||||
- [[<-- Prev]](../core-java-concurrency-basic-2)
|
||||
|
||||
+2
-1
@@ -18,7 +18,8 @@ public class Employee {
|
||||
}
|
||||
|
||||
private static void incrementCount() {
|
||||
System.out.println("Count = " + ++count);
|
||||
++count;
|
||||
// System.out.println("Count = " + ++count);
|
||||
}
|
||||
|
||||
public static Integer getCount() {
|
||||
|
||||
+2
-1
@@ -24,7 +24,8 @@ public class Employee {
|
||||
private static void incrementCount() {
|
||||
lock.lock();
|
||||
try {
|
||||
System.out.println("Count = " + ++count);
|
||||
++count;
|
||||
// System.out.println("Count = " + ++count);
|
||||
}
|
||||
finally {
|
||||
lock.unlock();
|
||||
|
||||
+2
-1
@@ -21,7 +21,8 @@ public class Employee {
|
||||
|
||||
private static void incrementCount() {
|
||||
synchronized(lock) {
|
||||
System.out.println("Count = " + ++count);
|
||||
++count;
|
||||
// System.out.println("Count = " + ++count);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -19,7 +19,8 @@ public class Employee
|
||||
|
||||
private static void incrementCount() {
|
||||
synchronized(Employee.class) {
|
||||
System.out.println("Count = " + ++count);
|
||||
++count;
|
||||
// System.out.println("Count = " + ++count);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -18,7 +18,8 @@ public class Employee {
|
||||
}
|
||||
|
||||
private static synchronized void incrementCount() {
|
||||
System.out.println("Count = " + ++count);
|
||||
++count;
|
||||
// System.out.println("Count = " + ++count);
|
||||
}
|
||||
|
||||
public static synchronized int getCount() {
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.baeldung.printmessagewithoutmain;
|
||||
|
||||
public final class PrintMessageWithoutMainMethod {
|
||||
|
||||
//Using Static Blocks
|
||||
static {
|
||||
System.out.println("Hello World!!");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
//Using Nested Classes
|
||||
static {
|
||||
NestedClass.printMessage();
|
||||
}
|
||||
|
||||
//Executing Code During Class Initialization
|
||||
private static final int STATUS = getStatus();
|
||||
private static int getStatus() {
|
||||
System.out.println("Hello World!!");
|
||||
System.exit(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
|
||||
static class NestedClass {
|
||||
static void printMessage() {
|
||||
System.out.println("Message from nested class");
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package com.baeldung.printmessagewithoutmain;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class PrintMessageWithoutMainUnitTest {
|
||||
@Test
|
||||
public void givenMessage_whenUsingJunitTest_thenPrintMessage() {
|
||||
System.out.println("Hello World!!");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
## Core Date Operations (Part 4)
|
||||
This module contains articles about date operations in Java.
|
||||
|
||||
### Relevant Articles:
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>core-java-date-operations-4</artifactId>
|
||||
<name>core-java-date-operations-4</name>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>11</source>
|
||||
<target>11</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<parent>
|
||||
<groupId>com.baeldung.core-java-modules</groupId>
|
||||
<artifactId>core-java-modules</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>joda-time</groupId>
|
||||
<artifactId>joda-time</artifactId>
|
||||
<version>${joda-time.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>${commons-lang3.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<joda-time.version>2.12.6</joda-time.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.baeldung.calculateweekdays;
|
||||
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.time.temporal.TemporalAdjusters;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class CalculateWeekdays {
|
||||
|
||||
public long getWorkingDaysWithStream(LocalDate start, LocalDate end){
|
||||
return start.datesUntil(end)
|
||||
.map(LocalDate::getDayOfWeek)
|
||||
.filter(day -> !Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(day))
|
||||
.count();
|
||||
}
|
||||
|
||||
public long getWorkingDaysWithoutStream(LocalDate start, LocalDate end) {
|
||||
boolean startOnWeekend = false;
|
||||
|
||||
// If starting at the weekend, move to following Monday
|
||||
if(start.getDayOfWeek().getValue() > 5){
|
||||
start = start.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
|
||||
startOnWeekend = true;
|
||||
}
|
||||
boolean endOnWeekend = false;
|
||||
// If ending at the weekend, move to previous Friday
|
||||
if(end.getDayOfWeek().getValue() > 5){
|
||||
end = end.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY));
|
||||
endOnWeekend = true;
|
||||
}
|
||||
// Cover case where starting on Saturday and ending following Sunday
|
||||
if(start.isAfter(end)){
|
||||
return 0;
|
||||
}
|
||||
// Get total weeks
|
||||
long weeks = ChronoUnit.WEEKS.between(start, end);
|
||||
|
||||
long addValue = startOnWeekend || endOnWeekend ? 1 : 0;
|
||||
|
||||
// Add on days that did not make up a full week
|
||||
return ( weeks * 5 ) + ( end.getDayOfWeek().getValue() - start.getDayOfWeek().getValue() ) + addValue;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
package com.baeldung.calculateweekdays;
|
||||
|
||||
import static junit.framework.TestCase.assertEquals;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class CalculateWeekdaysUnitTest {
|
||||
|
||||
// Start Saturday end following Sunday (answer is 0)
|
||||
LocalDate startTomorrow = LocalDate.of(2023, 12, 2);
|
||||
LocalDate endTomorrow = LocalDate.of(2023, 12, 3);
|
||||
|
||||
// Three week gap with midweek start and finish (answer is 17)
|
||||
LocalDate startThreeWeeks = LocalDate.of(2023, 11, 28);
|
||||
LocalDate endThreeWeeks = LocalDate.of(2023, 12, 21);
|
||||
|
||||
// Three week gap with midweek start and weekend finish (answer is 17)
|
||||
LocalDate startThreeWeeks2 = LocalDate.of(2023, 11, 6);
|
||||
LocalDate endThreeWeeks2 = LocalDate.of(2023, 12, 30);
|
||||
|
||||
// Week gap start and end on weekend (answer is 40)
|
||||
LocalDate startThreeWeeksWeekend = LocalDate.of(2023, 12, 2);
|
||||
LocalDate endThreeWeeksWeekend = LocalDate.of(2023, 12, 9);
|
||||
|
||||
@Test
|
||||
void givenTwoDaysOnSameWeekend_whenUsingStreams_thenCalculateWeekdays(){
|
||||
CalculateWeekdays c = new CalculateWeekdays();
|
||||
long result = c.getWorkingDaysWithStream(startTomorrow, endTomorrow);
|
||||
assertEquals(0, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenTwoDaysOnSameWeekend_whenUsingMaths_thenCalculateWeekdays(){
|
||||
CalculateWeekdays c = new CalculateWeekdays();
|
||||
long result = c.getWorkingDaysWithoutStream(startTomorrow, endTomorrow);
|
||||
assertEquals(0, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenAThreeWeekGapMidweekDates_whenUsingStreams_thenCalculateWeekdays(){
|
||||
CalculateWeekdays c = new CalculateWeekdays();
|
||||
long result = c.getWorkingDaysWithStream(startThreeWeeks, endThreeWeeks);
|
||||
assertEquals(17, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenAThreeWeekGapMidweekDates_whenUsingMaths_thenCalculateWeekdays(){
|
||||
CalculateWeekdays c = new CalculateWeekdays();
|
||||
long result = c.getWorkingDaysWithoutStream(startThreeWeeks, endThreeWeeks);
|
||||
assertEquals(17, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenThreeWeekGapMidweekAndWeekendDates_whenUsingStreams_thenCalculateWeekdays(){
|
||||
CalculateWeekdays c = new CalculateWeekdays();
|
||||
long result = c.getWorkingDaysWithStream(startThreeWeeksWeekend, endThreeWeeksWeekend);
|
||||
assertEquals(5, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenThreeWeekGapMidweekAndWeekendDates_whenUsingMaths_thenCalculateWeekdays(){
|
||||
CalculateWeekdays c = new CalculateWeekdays();
|
||||
long result = c.getWorkingDaysWithoutStream(startThreeWeeksWeekend, endThreeWeeksWeekend);
|
||||
assertEquals(5, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenThreeWeekGapWeekendDates_whenUsingStreams_thenCalculateWeekdays(){
|
||||
CalculateWeekdays c = new CalculateWeekdays();
|
||||
long result = c.getWorkingDaysWithStream(startThreeWeeks2, endThreeWeeks2);
|
||||
assertEquals(40, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenThreeWeekGapWeekendDates_whenUsingMaths_thenCalculateWeekdays(){
|
||||
CalculateWeekdays c = new CalculateWeekdays();
|
||||
long result = c.getWorkingDaysWithoutStream(startThreeWeeks2, endThreeWeeks2);
|
||||
assertEquals(40, result);
|
||||
}
|
||||
|
||||
}
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
package com.baeldung.longtodate;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import org.joda.time.DateTimeZone;
|
||||
import org.joda.time.Instant;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class LongToDateUnitTest {
|
||||
|
||||
@Test
|
||||
void givenLongValue_whenUsingInstantClass_thenConvert() {
|
||||
Instant expectedDate = Instant.parse("2020-09-08T12:16:40Z");
|
||||
long seconds = 1599567400L;
|
||||
|
||||
Instant date = Instant.ofEpochSecond(seconds);
|
||||
|
||||
assertEquals(expectedDate, date);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenLongValue_whenUsingLocalDateClass_thenConvert() {
|
||||
LocalDate expectedDate = LocalDate.of(2023, 10, 17);
|
||||
long epochDay = 19647L;
|
||||
|
||||
LocalDate date = LocalDate.ofEpochDay(epochDay);
|
||||
|
||||
assertEquals(expectedDate, date);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenLongValue_whenUsingDateClass_thenConvert() throws ParseException {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
Date expectedDate = dateFormat.parse("2023-07-15 22:00:00");
|
||||
long milliseconds = 1689458400000L;
|
||||
|
||||
Date date = new Date(milliseconds);
|
||||
|
||||
assertEquals(expectedDate, date);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenLongValue_whenUsingCalendarClass_thenConvert() throws ParseException {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
Date expectedDate = dateFormat.parse("2023-07-15 22:00:00");
|
||||
long milliseconds = 1689458400000L;
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
calendar.setTimeInMillis(milliseconds);
|
||||
|
||||
assertEquals(expectedDate, calendar.getTime());
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenLongValue_whenUsingJodaTimeLocalDateClass_thenConvert() {
|
||||
org.joda.time.LocalDate expectedDate = new org.joda.time.LocalDate(2023, 7, 15);
|
||||
long milliseconds = 1689458400000L;
|
||||
|
||||
org.joda.time.LocalDate date = new org.joda.time.LocalDate(milliseconds, DateTimeZone.UTC);
|
||||
|
||||
assertEquals(expectedDate, date);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
## Java Date/time conversion Cookbooks and Examples
|
||||
|
||||
This module contains articles about converting between Java date and time objects.
|
||||
|
||||
### Relevant Articles:
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>core-java-datetime-conversion-2</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
<name>core-java-datetime-conversion-2</name>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<parent>
|
||||
<groupId>com.baeldung.core-java-modules</groupId>
|
||||
<artifactId>core-java-modules</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>joda-time</groupId>
|
||||
<artifactId>joda-time</artifactId>
|
||||
<version>${joda-time.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>${commons-lang3.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.msarhan</groupId>
|
||||
<artifactId>ummalqura-calendar</artifactId>
|
||||
<version>${ummalqura-calendar.version}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>core-java-datetime-conversion-2</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<properties>
|
||||
<joda-time.version>2.12.5</joda-time.version>
|
||||
<ummalqura-calendar.version>2.0.2</ummalqura-calendar.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.baeldung.gregoriantohijri;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.chrono.ChronoLocalDate;
|
||||
import java.time.chrono.HijrahChronology;
|
||||
import java.time.chrono.HijrahDate;
|
||||
import java.util.GregorianCalendar;
|
||||
|
||||
import org.joda.time.chrono.IslamicChronology;
|
||||
|
||||
import com.github.msarhan.ummalqura.calendar.UmmalquraCalendar;
|
||||
|
||||
public class GregorianToHijriDateConverter {
|
||||
public static HijrahDate usingHijrahChronology(LocalDate gregorianDate) {
|
||||
HijrahChronology hijrahChronology = HijrahChronology.INSTANCE;
|
||||
ChronoLocalDate hijriChronoLocalDate = hijrahChronology.date(gregorianDate);
|
||||
return HijrahDate.from(hijriChronoLocalDate);
|
||||
}
|
||||
|
||||
public static HijrahDate usingFromMethod(LocalDate gregorianDate) {
|
||||
return HijrahDate.from(gregorianDate);
|
||||
}
|
||||
|
||||
public static org.joda.time.DateTime usingJodaDate(org.joda.time.DateTime gregorianDate) {
|
||||
return gregorianDate.withChronology(IslamicChronology.getInstance());
|
||||
}
|
||||
|
||||
public static UmmalquraCalendar usingUmmalquraCalendar(GregorianCalendar gregorianCalendar) throws ParseException {
|
||||
UmmalquraCalendar hijriCalendar = new UmmalquraCalendar();
|
||||
hijriCalendar.setTime(gregorianCalendar.getTime());
|
||||
return hijriCalendar;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user