holidayList) {
- return !holidayList.isEmpty();
- }
-
/**
* @param myanmarDate MyanmarDate Object
* @return List of holiday String
diff --git a/src/main/java/mmcalendar/Language.java b/src/main/java/mmcalendar/Language.java
index 2401113..2a83f06 100644
--- a/src/main/java/mmcalendar/Language.java
+++ b/src/main/java/mmcalendar/Language.java
@@ -1,5 +1,9 @@
package mmcalendar;
+
+/**
+ * Representing different languages and their corresponding punctuation marks.
+ */
public enum Language {
ENGLISH(0, ", ", "."),
@@ -15,20 +19,43 @@ public enum Language {
private final String punctuation;
+ /**
+ * Constructor for the Language enum.
+ *
+ * @param languageIndex The index of the language.
+ * @param punctuationMark The punctuation mark used in the language for separation.
+ * @param punctuation The punctuation mark used in the language for ending a sentence.
+ */
Language(int languageIndex, String punctuationMark, String punctuation) {
this.languageIndex = languageIndex;
this.punctuationMark = punctuationMark;
this.punctuation = punctuation;
}
+
+ /**
+ * Get the index of the language.
+ *
+ * @return The language index.
+ */
public int getLanguageIndex() {
return languageIndex;
}
+ /**
+ * Get the punctuation mark used for separation in the language.
+ *
+ * @return The punctuation mark for separation.
+ */
public String getPunctuationMark() {
return this.punctuationMark;
}
+ /**
+ * Get the punctuation mark used for ending a sentence in the language.
+ *
+ * @return The punctuation mark for ending a sentence.
+ */
public String getPunctuation() {
return this.punctuation;
}
diff --git a/src/main/java/mmcalendar/LanguageTranslator.java b/src/main/java/mmcalendar/LanguageTranslator.java
index c725d58..8cc4175 100644
--- a/src/main/java/mmcalendar/LanguageTranslator.java
+++ b/src/main/java/mmcalendar/LanguageTranslator.java
@@ -205,7 +205,7 @@ private LanguageTranslator() {
*/
private static String translateSentence(String str, int fromLn, int toLn) {
for (String[] dic : CATALOG) {
- str = str.replaceAll(dic[fromLn], dic[toLn]);
+ str = str.replace(dic[fromLn], dic[toLn]);
}
return str;
}
diff --git a/src/main/java/mmcalendar/MyanmarCalendarKernel.java b/src/main/java/mmcalendar/MyanmarCalendarKernel.java
index b825922..68a985f 100644
--- a/src/main/java/mmcalendar/MyanmarCalendarKernel.java
+++ b/src/main/java/mmcalendar/MyanmarCalendarKernel.java
@@ -52,7 +52,6 @@ public static MyanmarMonths calculateRelatedMyanmarMonths(int myear, int mmonth)
mmonth = ei;
}
- // populateMonthLists
return populateMonthLists(m1.getYearType(), si, ei, mmonth);
}
@@ -88,14 +87,80 @@ private static MyanmarMonths populateMonthLists(int yearType, int si, int ei, in
return new MyanmarMonths(monthList, monthNameList, currentIndex);
}
+ /**
+ * Western Calendar Title for month
+ *
+ * @param year Western Year
+ * @param month Western Month [1 = Jan, ... , 12 = Dec]
+ * Month value is 1-based. e.g., 1 for January.
+ * @return Calendar Title for month
+ */
+ public static String getCalendarHeaderForWesternStyle(int year, int month) {
+ return getCalendarHeaderForWesternStyle(year, month, Config.getInstance().getLanguage());
+ }
- public static String getCalendarHeader(int myear, int mmonth, int mmday) {
- return getCalendarHeader(myear, mmonth, mmday, Config.getInstance().getLanguage());
+ /**
+ * Western Calendar Title for month
+ *
+ * @param year Western Year
+ * @param month Western Month [1 = Jan, ... , 12 = Dec]
+ * Month value is 1-based. e.g., 1 for January.
+ * @param language Language
+ * @return Calendar Title for month
+ */
+ public static String getCalendarHeaderForWesternStyle(int year, int month, Language language) {
+ // time zone is irrelevant
+ int monthLength = WesternDateKernel.getLengthOfMonth(year, month, Config.getInstance().getCalendarType().getNumber());
+ MyanmarDate startDate = MyanmarDate.of(year, month, 1);
+ double je = startDate.getJulianDayNumber() + monthLength - 1;
+ MyanmarDate endDate = MyanmarDate.of(je);
+ return getCalendarHeader(startDate, endDate, language);
}
- public static String getCalendarHeader(int myear, int mmonth, int mmday, Language language) {
+ /**
+ * Calendar Title for month
+ *
+ * @param myear Myanmar Year
+ * @param mmonth Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd)
+ * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8,
+ * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12, Late Tagu=13
+ * Late Kason=14 ]
+ * @return Calendar Title for month
+ */
+ public static String getCalendarHeader(int myear, int mmonth) {
+ return getCalendarHeader(myear, mmonth, Config.getInstance().getLanguage());
+ }
+
+ /**
+ * Calendar Title for month
+ *
+ * @param myear Myanmar Year
+ * @param mmonth Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd)
+ * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8,
+ * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12, Late Tagu=13
+ * Late Kason=14 ]
+ * @param language Language
+ * @return Calendar Title for month
+ */
+ public static String getCalendarHeader(int myear, int mmonth, Language language) {
+ return getCalendarHeader(myear, mmonth, 1, language);
+ }
+
+ /**
+ * Calendar Title for month
+ *
+ * @param myear Myanmar Year
+ * @param mmonth Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd)
+ * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8,
+ * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12, Late Tagu=13
+ * Late Kason=14 ]
+ * @param mday day of month [from 1 to 29 or 30]
+ * @param language Language
+ * @return Calendar Title for month
+ */
+ public static String getCalendarHeader(int myear, int mmonth, int mday, Language language) {
// Find julian day number of start of the month
- double julianDate = MyanmarDateKernel.myanmarDateToJulian(myear, mmonth, mmday);
+ double julianDate = MyanmarDateKernel.myanmarDateToJulian(myear, mmonth, mday);
MyanmarDate myanmarDate = MyanmarDate.of(julianDate);
@@ -124,7 +189,8 @@ private static String getCalendarHeader(MyanmarDate startDateOfMonth, MyanmarDat
if (endDateOfMonth.getYearValue() >= 2) {
//if Myanmar year after 2 ME
- str.append(getHeaderForMyanmarYear(startDateOfMonth, endDateOfMonth, language))
+ str.append(" ")
+ .append(getHeaderForMyanmarYear(startDateOfMonth, endDateOfMonth, language))
.append(" ");
str.append(getHeaderForMyanmarMonth(startDateOfMonth, endDateOfMonth, language));
@@ -133,7 +199,7 @@ private static String getCalendarHeader(MyanmarDate startDateOfMonth, MyanmarDat
return str.toString();
}
- private static String getHeaderForBuddhistEra(MyanmarDate startDate, MyanmarDate endDate, Language language) {
+ public static String getHeaderForBuddhistEra(MyanmarDate startDate, MyanmarDate endDate, Language language) {
StringBuilder buddhistEraStringBuilder = new StringBuilder();
@@ -147,13 +213,12 @@ private static String getHeaderForBuddhistEra(MyanmarDate startDate, MyanmarDate
}
buddhistEraStringBuilder.append(" ")
- .append(LanguageTranslator.translate("Ku", language))
- .append(" ");
+ .append(LanguageTranslator.translate("Ku", language));
return buddhistEraStringBuilder.toString();
}
- private static String getHeaderForMyanmarYear(MyanmarDate startDateOfMonth, MyanmarDate endDateOfMonth, Language language) {
+ public static String getHeaderForMyanmarYear(MyanmarDate startDateOfMonth, MyanmarDate endDateOfMonth, Language language) {
StringBuilder myanmarYearStringBuilder = new StringBuilder();
@@ -177,7 +242,7 @@ private static String getHeaderForMyanmarYear(MyanmarDate startDateOfMonth, Myan
return myanmarYearStringBuilder.toString();
}
- private static String getHeaderForMyanmarMonth(MyanmarDate startDateOfMonth, MyanmarDate endDateOfMonth, Language language) {
+ public static String getHeaderForMyanmarMonth(MyanmarDate startDateOfMonth, MyanmarDate endDateOfMonth, Language language) {
StringBuilder myanmarMonthStringBuilder = new StringBuilder();
diff --git a/src/main/java/mmcalendar/MyanmarDate.java b/src/main/java/mmcalendar/MyanmarDate.java
index 889ba63..7116f0b 100644
--- a/src/main/java/mmcalendar/MyanmarDate.java
+++ b/src/main/java/mmcalendar/MyanmarDate.java
@@ -1,7 +1,5 @@
package mmcalendar;
-import mmcalendar.util.DateTimeUtils;
-
import java.io.Serializable;
import java.time.*;
import java.util.Calendar;
@@ -95,20 +93,6 @@ protected MyanmarDate(int myear, int yearType, int yearLength,
this.jd = jd;
}
- public MyanmarDate(MyanmarDate original) {
- this.myear = original.myear;
- this.yearType = original.yearType;
- this.yearLength = original.yearLength;
- this.mmonth = original.mmonth;
- this.monthType = original.monthType;
- this.monthLength = original.monthLength;
- this.monthDay = original.monthDay;
- this.fortnightDay = original.fortnightDay;
- this.moonPhase = original.moonPhase;
- this.weekDay = original.weekDay;
- this.jd = original.jd;
- }
-
//-----------------------------------------------------------------------
/**
@@ -167,6 +151,29 @@ public static MyanmarDate create(
return create(myear, mmonth, monthDay);
}
+
+ /**
+ * Create Myanmar Date from myanmar year, length of the month, moon phase and fortnight day
+ *
+ * @param myear Myanmar Year
+ * @param myanmarMonthName Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd)
+ * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8,
+ * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12 , Late Tagu = 13, Late Kason = 14]
+ * @param moonPhase moon phase [0=waxing, 1=full moon, 2=waning, 3=new moon]
+ * @param fortnightDay fortnight day [1 to 15]
+ * @return Myanmar date
+ */
+ public static MyanmarDate create(
+ int myear,
+ String myanmarMonthName,
+ String moonPhase,
+ int fortnightDay
+ ) {
+ int mmonth = MyanmarDateKernel.searchMyanmarMonthNumber(myanmarMonthName);
+ int moonPhaseValue = MyanmarDateKernel.searchMoonPhase(moonPhase);
+ return create(myear, mmonth, moonPhaseValue, fortnightDay);
+ }
+
//-----------------------------------------------------------------------
public static MyanmarDate now() {
LocalDateTime canberraDateTime = LocalDateTime.now(MYANMAR_ZONE_ID);
@@ -191,24 +198,33 @@ public static MyanmarDate of(Calendar calendar) {
return of(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH), Config.getInstance().getCalendarType(), 0);
}
+
+ public static MyanmarDate of(LocalDate myanmarLocalDate) {
+ return of(
+ myanmarLocalDate.getYear(),
+ myanmarLocalDate.getMonthValue(),
+ myanmarLocalDate.getDayOfMonth()
+ );
+ }
+
/**
* LocalDateTime to Myanmar Date
*
- * @param myanmarDateTime java {@link LocalDateTime}
+ * @param myanmarLocalDateTime java {@link LocalDateTime}
* @return the Myanmar date, not null
* @see LocalDateTime
*
* Note: All the calculations are based on Myanmar Standard Time (UTC+06:30)
* which is calculated on the basis of 97° 30' longitude.
*/
- public static MyanmarDate of(LocalDateTime myanmarDateTime) {
+ public static MyanmarDate of(LocalDateTime myanmarLocalDateTime) {
return of(
- myanmarDateTime.getYear(),
- myanmarDateTime.getMonthValue(),
- myanmarDateTime.getDayOfMonth(),
- myanmarDateTime.getHour(),
- myanmarDateTime.getMinute(),
- myanmarDateTime.getSecond()
+ myanmarLocalDateTime.getYear(),
+ myanmarLocalDateTime.getMonthValue(),
+ myanmarLocalDateTime.getDayOfMonth(),
+ myanmarLocalDateTime.getHour(),
+ myanmarLocalDateTime.getMinute(),
+ myanmarLocalDateTime.getSecond()
);
}
@@ -289,36 +305,17 @@ public static MyanmarDate of(int year, int month, int day, int hour, int minute,
return of(year, month, day, hour, minute, second, Config.getInstance().getCalendarType(), 0);
}
- /**
- * @param year Western Year
- * @param month Western Month [1 = Jan, ... , 12 = Dec]
- * Month value is 1-based. e.g., 1 for January.
- * @param day Western Day [1-31]
- * @param hour Hour
- * @param minute Minute
- * @param second Second
- * @param calendarType CalendarType Enum
- * @param sg : Beginning of Gregorian calendar in JDN [Optional argument:
- * default=2361222]
- * @return {@link MyanmarDate} Object
- */
- public static MyanmarDate of(int year, int month, int day, int hour, int minute, int second,
- CalendarType calendarType, double sg) {
- double julianDayNumber = WesternDateKernel.westernToJulian(year, month, day, hour, minute, second, calendarType, sg);
- return of(julianDayNumber);
- }
-
/**
* Julian date to Myanmar Date
- *
+ * @param julianDayNumber Julian day number
* @return {@link MyanmarDate} Object
*/
public static MyanmarDate of(double julianDayNumber) {
return MyanmarDateKernel.julianToMyanmarDate(julianDayNumber);
}
- //-----------------------------------------------------------------------
+ //-----------------------------------------------------------------------
public String getBuddhistEra(Language language) {
return LanguageTranslator.translate(myear + 1182.0, language);
}
@@ -327,6 +324,28 @@ public String getBuddhistEra() {
return getBuddhistEra(Config.getInstance().getLanguage());
}
+ /**
+ * Creates MyanmarDate object based on the given parameters representing a date and time
+ * in the Western calendar system.
+ *
+ * @param year The year in the Western calendar.
+ * @param month The month in the Western calendar (1 = Jan, ... , 12 = Dec)
+ * Month value is 1-based. e.g., 1 for January.
+ * @param day The day of the month in the Western calendar. [1-31]
+ * @param hour The hour of the day (24-hour format).
+ * @param minute The minute of the hour.
+ * @param second The second of the minute.
+ * @param calendarType CalendarType Enum (The type of calendar used for the conversion.)
+ * @param sg : Beginning of Gregorian calendar in JDN [Optional argument:
+ * default=2361222]
+ * @return {@link MyanmarDate} Object representing the equivalent date in the Myanmar calendar.
+ */
+ public static MyanmarDate of(int year, int month, int day, int hour, int minute, int second,
+ CalendarType calendarType, double sg) {
+ double julianDayNumber = WesternDateKernel.westernToJulian(year, month, day, hour, minute, second, calendarType, sg);
+ return of(julianDayNumber);
+ }
+
public int getBuddhistEraValue() {
return myear + 1182;
}
@@ -387,7 +406,16 @@ public String getMonthName() {
}
public String getMonthName(Language language) {
- return LanguageTranslator.translate(EMA[this.mmonth], language);
+ StringBuilder stringBuilder = new StringBuilder();
+
+ if (this.mmonth == 4 && this.yearType > 0) {
+ stringBuilder.append(LanguageTranslator.translate("Second", language))
+ .append(" ");
+ }
+
+ stringBuilder.append(LanguageTranslator.translate(EMA[this.mmonth], language));
+
+ return stringBuilder.toString();
}
/**
@@ -501,7 +529,7 @@ public String format(String pattern) {
public String format(String pattern, Language language) {
if (pattern == null || language == null) {
- throw new NullPointerException();
+ throw new IllegalArgumentException("Pattern or Language must not be null");
}
char[] charArray = pattern.toCharArray();
@@ -597,16 +625,17 @@ public ZonedDateTime toMyanmarZonedDateTime() {
}
public ZonedDateTime toZonedDateTime(ZoneId zoneId) {
- long epochSecond = DateTimeUtils.julianToUnixTime(this.jd);
- return LocalDateTime.ofEpochSecond(
- epochSecond,
- 0,
- ZoneOffset.ofTotalSeconds(0)
+ WesternDate wd = WesternDate.of(this.jd);
+ return LocalDateTime.of(wd.getYear(),
+ wd.getMonth(),
+ wd.getDay(),
+ wd.getHour(),
+ wd.getMinute(),
+ wd.getSecond()
).atZone(MYANMAR_ZONE_ID)
.withZoneSameInstant(zoneId);
}
-
/**
* Java has a rough support for Julian day number.
* It counts the days correctly.
@@ -644,7 +673,7 @@ public LocalDateTime toLocalDateTime(ZoneId zoneId) {
* @return {@link LocalDate} with Myanmar Timezone
*/
public LocalDate toMyanmarLocalDate() {
- return toMyanmarLocalDate(MYANMAR_ZONE_ID);
+ return toLocalDate(MYANMAR_ZONE_ID);
}
/**
@@ -657,7 +686,7 @@ public LocalDate toMyanmarLocalDate() {
* @param zoneId zone
* @return {@link LocalDate}
*/
- public LocalDate toMyanmarLocalDate(ZoneId zoneId) {
+ public LocalDate toLocalDate(ZoneId zoneId) {
return toZonedDateTime(zoneId)
.toLocalDate();
}
@@ -745,10 +774,6 @@ public boolean equals(Object obj) {
return yearType == other.yearType;
}
- public static MyanmarDate copyOf(MyanmarDate original) {
- return new MyanmarDate(original);
- }
-
/**
* Checks if the Day, Month, and Year are the same,
* while disregarding the Hour, Minute, and Second.
diff --git a/src/main/java/mmcalendar/MyanmarDateKernel.java b/src/main/java/mmcalendar/MyanmarDateKernel.java
index 6822ae7..99ec64c 100644
--- a/src/main/java/mmcalendar/MyanmarDateKernel.java
+++ b/src/main/java/mmcalendar/MyanmarDateKernel.java
@@ -223,16 +223,6 @@ public static Map checkWatat(int my) {
return map;
}
- /**
- * Myanmar date to Julian date (12 PM 00 Seconds)
- *
- * @param myanmarDate {@link MyanmarDate} Object
- * @return julian day number
- */
- public static double myanmarDateToJulian(MyanmarDate myanmarDate) {
- return myanmarDateToJulian(myanmarDate.getYearValue(), myanmarDate.getMonth(), myanmarDate.getDayOfMonth());
- }
-
/**
* Myanmar date to Julian date dependency: chk_my (my)
*
@@ -280,7 +270,7 @@ public static int myanmarDateToJulian(int myear, int mmonth, int mmday) {
* @return Julian Day Number
*/
public static double getJulianDayNumber(int myear, String myanmarMonthName, int mmday) {
- int mmonth = searchMyanmarMonth(myanmarMonthName);
+ int mmonth = searchMyanmarMonthNumber(myanmarMonthName);
if (mmonth < 0) {
throw new DateTimeException("Invalid value for myanmarMonthName : " + myanmarMonthName);
}
@@ -295,40 +285,55 @@ public static double getJulianDayNumber(int myear, String myanmarMonthName, int
* Tabaung=12, Late Tagu=13, Late Kason=14]
* @return myanmar month number
*/
- public static int searchMyanmarMonth(String myanmarMonthName) {
- switch (myanmarMonthName) {
- case "First Waso":
+ public static int searchMyanmarMonthNumber(String myanmarMonthName) {
+ switch (myanmarMonthName.toLowerCase()) {
+ case "first waso":
return 0;
- case "Tagu":
+ case "tagu":
return 1;
- case "Kason":
+ case "kason":
return 2;
- case "Nayon":
+ case "nayon":
return 3;
- case "Waso":
+ case "waso":
return 4;
- case "Wagaung":
+ case "wagaung":
return 5;
- case "Tawthalin":
+ case "tawthalin":
return 6;
- case "Thadingyut":
+ case "thadingyut":
return 7;
- case "Tazaungmon":
+ case "tazaungmon":
return 8;
- case "Nadaw":
+ case "nadaw":
return 9;
- case "Pyatho":
+ case "pyatho":
return 10;
- case "Tabodwe":
+ case "tabodwe":
return 11;
- case "Tabaung":
+ case "tabaung":
return 12;
- case "Late Tagu":
+ case "late tagu":
return 13;
- case "Late Kason":
+ case "late kason":
return 14;
default:
return -1;
}
}
+
+ public static int searchMoonPhase(String moonPhase) {
+ switch (moonPhase.toLowerCase()) {
+ case "waxing":
+ return 0;
+ case "full moon":
+ return 1;
+ case "waning":
+ return 2;
+ case "new moon":
+ return 3;
+ default:
+ return -1;
+ }
+ }
}
diff --git a/src/main/java/mmcalendar/MyanmarMonths.java b/src/main/java/mmcalendar/MyanmarMonths.java
index 4405fb6..30a2ffa 100644
--- a/src/main/java/mmcalendar/MyanmarMonths.java
+++ b/src/main/java/mmcalendar/MyanmarMonths.java
@@ -23,6 +23,20 @@ protected MyanmarMonths(List monthList, List monthNameList, int
this.calculationMonth = calculationMonth;
}
+ /**
+ * Calculate related Myanmar month names by year
+ *
+ * @param myear Myanmar Year
+ * @param mmonth Myanmar month [Tagu=1, Kason=2, Nayon=3, 1st Waso=0, (2nd)
+ * Waso=4, Wagaung=5, Tawthalin=6, Thadingyut=7, Tazaungmon=8,
+ * Nadaw=9, Pyatho=10, Tabodwe=11, Tabaung=12, Late Tagu=13
+ * Late Kason=14 ]
+ * @return {@link MyanmarMonths} Object
+ */
+ public static MyanmarMonths of(int myear, int mmonth) {
+ return MyanmarCalendarKernel.calculateRelatedMyanmarMonths(myear, mmonth);
+ }
+
public List getMonthList() {
return monthList;
}
diff --git a/src/main/java/mmcalendar/MyanmarYearConstants.java b/src/main/java/mmcalendar/MyanmarYearConstants.java
index 0f88312..620dafc 100644
--- a/src/main/java/mmcalendar/MyanmarYearConstants.java
+++ b/src/main/java/mmcalendar/MyanmarYearConstants.java
@@ -29,6 +29,7 @@ public static Map getMyConst(int my) {
// exception in watat year
double exceptionInWatatYear = 0;
int i;
+
int[][] fme;
int[] wte;
@@ -63,8 +64,9 @@ else if (my >= 798) {
watatOffset = -1.1;
numberOfMonths = -1;
fme = new int[][]{
- {813, -1}, {849, -1}, {851, -1}, {854, -1}, {927, -1}, {933, -1}, {936, -1},
- {938, -1}, {949, -1}, {952, -1}, {963, -1}, {968, -1}, {1039, -1}
+ {813, -1}, {849, -1}, {851, -1}, {854, -1}, {927, -1}, {933, -1},
+ {936, -1}, {938, -1}, {949, -1}, {952, -1}, {963, -1}, {968, -1},
+ {1039, -1}
};
wte = new int[]{};
}
@@ -74,8 +76,8 @@ else if (my >= 798) {
watatOffset = -1.1;
numberOfMonths = -1;
fme = new int[][]{
- {205, 1}, {246, 1}, {471, 1}, {572, -1}, {651, 1}, {653, 2}, {656, 1}, {672, 1},
- {729, 1}, {767, -1}
+ {205, 1}, {246, 1}, {471, 1}, {572, -1}, {651, 1}, {653, 2},
+ {656, 1}, {672, 1}, {729, 1}, {767, -1}
};
wte = new int[]{};
}
diff --git a/src/main/java/mmcalendar/WesternDate.java b/src/main/java/mmcalendar/WesternDate.java
index 5e1d592..a7fd558 100644
--- a/src/main/java/mmcalendar/WesternDate.java
+++ b/src/main/java/mmcalendar/WesternDate.java
@@ -29,6 +29,57 @@ public class WesternDate implements Serializable {
this.second = second;
}
+ public static WesternDate of(MyanmarDate date) {
+ return of(date.getJulianDayNumber());
+ }
+
+ public static WesternDate of(MyanmarDate date, CalendarType calendarType) {
+ return of(date.getJulianDayNumber(), calendarType);
+ }
+
+ /**
+ * Julian date to Western date
+ *
+ * @param julianDate Julian date
+ * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second)
+ * {@link WesternDate} object
+ */
+ public static WesternDate of(double julianDate) {
+ return of(julianDate, Config.getInstance().getCalendarType());
+ }
+
+ /**
+ * Julian date to Western date Credit4 Gregorian date: (j2w)
+ * Credit4 Julian
+ * Calendar:
+ *
+ * @param julianDate julian date
+ * @param calendarType {@link CalendarType} Enum
+ * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second)
+ * {@link WesternDate} object
+ */
+ public static WesternDate of(double julianDate, CalendarType calendarType) {
+ return of(julianDate, calendarType, 0);
+ }
+
+
+ /**
+ * Julian date to Western date Credit4 Gregorian date: (j2w)
+ * Credit4 Julian
+ * Calendar:
+ *
+ * @param julianDate julian date
+ * @param calendarType calendar type [Optional argument: 0=english (default),
+ * 1=Gregorian, 2=Julian]
+ * @param sg Beginning of Gregorian calendar in JDN [Optional argument:
+ * (default=2361222) ]
+ * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second)
+ * {@link WesternDate} object
+ */
+ public static WesternDate of(double julianDate, CalendarType calendarType, double sg) {
+ return WesternDateKernel.julianToWestern(julianDate, calendarType.getNumber(), sg);
+ }
+
public int getYear() {
return year;
}
@@ -42,8 +93,7 @@ public int getDay() {
}
/**
- *
- * @return hour [0-23]
+ * @return hour [0-23]
*/
public int getHour() {
return hour;
@@ -57,6 +107,45 @@ public int getSecond() {
return second;
}
+
+ /**
+ * @return Julian day number
+ */
+ public double toJulian() {
+ return toJulian(Config.getInstance().getCalendarType());
+ }
+
+ /**
+ * @param calendarType CalendarType enum
+ * [0-English, 1-Gregorian, 2-Julian]
+ * calendar type [Optional argument: 0=english (default),
+ * 1=Gregorian, 2=Julian]
+ * @return Julian day number
+ */
+ public double toJulian(CalendarType calendarType) {
+ return toJulian(calendarType, 0);
+ }
+
+ /**
+ * @param calendarType CalendarType enum
+ * [0-English, 1-Gregorian, 2-Julian]
+ * calendar type [Optional argument: 0=english (default),
+ * 1=Gregorian, 2=Julian]
+ * @param sg SG: Beginning of Gregorian calendar in JDN [Optional argument:
+ * (default = 2361222)]
+ * @return Julian day number
+ */
+ public double toJulian(CalendarType calendarType, double sg) {
+ return WesternDateKernel.westernToJulian(
+ this.getYear(),
+ this.getMonth(),
+ this.getDay(),
+ this.getHour(),
+ this.getMinute(),
+ this.getSecond(),
+ calendarType, sg);
+ }
+
@Override
public String toString() {
return "WesternDate [year=" + year + ", month=" + month + ", day=" + day + ", hour=" + hour + ", minute="
diff --git a/src/main/java/mmcalendar/WesternDateConverter.java b/src/main/java/mmcalendar/WesternDateConverter.java
deleted file mode 100644
index bc8754e..0000000
--- a/src/main/java/mmcalendar/WesternDateConverter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package mmcalendar;
-
-/**
- * Western Date Converter
- *
- * @author Chan Mrate Ko Ko
- * @version 1.0.2
- * @since 1.0
- */
-public class WesternDateConverter {
-
- /**
- * Don't let anyone instantiate this class.
- */
- private WesternDateConverter() {
- }
-
-
- /**
- * Myanmar Date to Western Date
- *
- * @param myanmarDate {@link MyanmarDate} object
- * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second)
- * {@link WesternDate} object
- */
- public static WesternDate convert(MyanmarDate myanmarDate) {
- return convert(myanmarDate.getJulianDayNumber());
- }
-
- /**
- * Julian date to Western date
- *
- * @param julianDate Julian date
- * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second)
- * {@link WesternDate} object
- */
- public static WesternDate convert(double julianDate) {
- return WesternDateKernel.julianToWestern(julianDate, Config.getInstance().getCalendarType());
- }
-
- /**
- * Julian date to Western date Credit4 Gregorian date:
- * Credit4 Julian
- * Calendar:
- *
- * @param julianDate julian date
- * @param calendarType CalendarType Enum
- * @return Western date (y=year, m=month, d=day, h=hour, n=minute, s=second)
- * {@link WesternDate} object
- */
- public static WesternDate convert(double julianDate, CalendarType calendarType) {
- return WesternDateKernel.julianToWestern(julianDate, calendarType.getNumber(), 0);
- }
-}
diff --git a/src/main/java/mmcalendar/WesternDateKernel.java b/src/main/java/mmcalendar/WesternDateKernel.java
index 4755b7e..5270369 100644
--- a/src/main/java/mmcalendar/WesternDateKernel.java
+++ b/src/main/java/mmcalendar/WesternDateKernel.java
@@ -191,18 +191,6 @@ public static double timeToDayFractionStartFrom12Noon(double hour, double minute
return ((hour - 12) / 24 + minute / 1440 + second / 86400);
}
- /**
- * @param westernDate WesternDate object
- * @param calendarType CalendarType Enum
- * @param sg SG: Beginning of Gregorian calendar in JDN [Optional argument:
- * (default=2361222)]
- * @return Julian number
- */
- public static double westernToJulian(WesternDate westernDate, CalendarType calendarType, double sg) {
- return westernToJulian(westernDate.getYear(), westernDate.getMonth(), westernDate.getDay(), westernDate.getHour(),
- westernDate.getMinute(), westernDate.getSecond(), calendarType, sg);
- }
-
/**
* The month according to calendar type
*
diff --git a/src/main/java/mmcalendar/util/DateTimeUtils.java b/src/main/java/mmcalendar/util/DateTimeUtils.java
deleted file mode 100644
index bd10208..0000000
--- a/src/main/java/mmcalendar/util/DateTimeUtils.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package mmcalendar.util;
-
-import java.time.LocalDate;
-import java.time.temporal.JulianFields;
-
-public class DateTimeUtils {
-
- /**
- * Convert LocalDate to Julian Date
- *
- * @param localDate {@link LocalDate}
- * @return Julian Date
- */
- public static double toJulian(LocalDate localDate) {
- return JulianFields.JULIAN_DAY.getFrom(localDate);
- }
-
-
- /**
- * Unix epoch (or Unix time or POSIX time or Unix timestamp) to Julian day number
- *
- * @param ut Number of seconds from 1970 Jan 1 00:00:00 (UTC)
- * @return Julian day number
- */
- public static double unixTimeToJulian(long ut) {
- return 2440587.5 + ut / 86400.0; // Convert to day (/24h/60min/60sec) and to JD
- }
-
- // check
-
- /**
- * Julian day number to Unix epoch (or Unix time or
- * POSIX time or Unix timestamp)
- *
- * @param jd Julian day number
- * @return unix Timestamp
- */
- public static long julianToUnixTime(double jd) {
- return (long) ((jd - 2440587.5) * 86400.0 + 0.5);
- }
-
- /**
- * Add Julian day number (utc time to myanmar time) to Julian day number
- * @param jd UTC Julian day number
- * @return Julian day number
- */
- public static double utcToConvertMyanmarTime(double jd) {
- // add myanmar time
- return jd + (6.5 / 24.0);
- }
-
- /**
- * Don't let anyone instantiate this class.
- */
- private DateTimeUtils() {
- }
-}
diff --git a/src/test/java/Usage.java b/src/test/java/Usage.java
new file mode 100644
index 0000000..d76bcf2
--- /dev/null
+++ b/src/test/java/Usage.java
@@ -0,0 +1,22 @@
+import mmcalendar.HolidayCalculator;
+import mmcalendar.Language;
+import mmcalendar.MyanmarCalendarKernel;
+import mmcalendar.MyanmarDate;
+
+import java.util.List;
+
+public class Usage {
+ public static void main(String[] args) {
+// String header = MyanmarCalendarKernel.getCalendarHeader(1380, 2, Language.ENGLISH);
+// System.out.println(header);
+
+ // Output : သာသနာနှစ် ၂၅၆၇ - ၂၅၆၈ ခု မြန်မာနှစ် ၁၃၈၅ - ၁၃၈၆ ခု တပေါင်း - တန်ခူး
+// String header = MyanmarCalendarKernel.getCalendarHeaderForWesternStyle(2024, 4, Language.ENGLISH);
+// System.out.println(header);
+
+ List anniversary = HolidayCalculator.getAnniversary(MyanmarDate.of(2017,1 ,1));
+ System.out.println(anniversary);
+
+ }
+
+}
diff --git a/src/test/java/mmcalendar/AstroBatchTest.java b/src/test/java/mmcalendar/AstroBatchTest.java
index f80bad0..3da5fc3 100644
--- a/src/test/java/mmcalendar/AstroBatchTest.java
+++ b/src/test/java/mmcalendar/AstroBatchTest.java
@@ -31,7 +31,6 @@ public void textByYear(int year) throws IOException {
String line;
while ((line = reader.readLine()) != null) {
-// System.out.println(line);
testJulianToMyanmarDate(line);
}
diff --git a/src/test/java/mmcalendar/AstroKernelTest.java b/src/test/java/mmcalendar/AstroKernelTest.java
index 5c92146..d0d5dcc 100644
--- a/src/test/java/mmcalendar/AstroKernelTest.java
+++ b/src/test/java/mmcalendar/AstroKernelTest.java
@@ -7,8 +7,6 @@
public class AstroKernelTest {
- private static MyanmarDate myanmarDate;
-
@BeforeClass
public static void beforeClass() {
Config.initDefault(
@@ -16,12 +14,10 @@ public static void beforeClass() {
.setCalendarType(CalendarType.ENGLISH)
.setLanguage(Language.ENGLISH)
.build());
- myanmarDate = MyanmarDate.of(641, 12, 22);
}
@AfterClass
public static void afterClass() {
- myanmarDate = null;
Config.initDefault(
new Config.Builder()
.setCalendarType(CalendarType.ENGLISH)
@@ -84,8 +80,8 @@ public void calculateYatyaza() {
@Test
public void calculatePyathada() {
- int yatyaza = AstroKernel.calculatePyathada(8, 3);
- assertThat(1, is(yatyaza));
+ int pyathada = AstroKernel.calculatePyathada(8, 3);
+ assertThat(1, is(pyathada));
}
@Test
diff --git a/src/test/java/mmcalendar/AstroTest.java b/src/test/java/mmcalendar/AstroTest.java
index e3daa32..b444869 100644
--- a/src/test/java/mmcalendar/AstroTest.java
+++ b/src/test/java/mmcalendar/AstroTest.java
@@ -2,13 +2,16 @@
import org.junit.*;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertEquals;
public class AstroTest {
private static MyanmarDate myanmarDate;
-
// execute before class
@BeforeClass
public static void beforeClass() {
@@ -46,16 +49,101 @@ public void after() {
}
@Test
- public void convert() {
+ public void convertTest() {
Astro astro = Astro.of(myanmarDate);
- Assert.assertEquals("Thamanyo", astro.getThamanyo());
- Assert.assertEquals("Nagapor", astro.getNagapor());
+ assertEquals("Thamanyo", astro.getThamanyo());
+ assertEquals("Nagapor", astro.getNagapor());
assertThat(5, is(astro.getMahaboteValue()));
- Assert.assertEquals("Thike", astro.getMahabote());
- Assert.assertEquals("Mahayatkyan", astro.getMahayatkyan());
+ assertEquals("Thike", astro.getMahabote());
+ assertEquals("Mahayatkyan", astro.getMahayatkyan());
+ assertThat(2, is(astro.getNakhatValue()));
+ assertEquals("Human", astro.getNakhat());
+ assertEquals("Mrigasiras", astro.getYearName());
+ assertThat(1, is(astro.getNagahleValue()));
+ assertEquals("North", astro.getNagahle());
+
+ assertEquals("", astro.getYatyaza());
+ assertEquals("", astro.getPyathada());
+ assertEquals("", astro.getSabbath());
+ assertEquals("", astro.getAmyeittasote());
+ assertEquals("", astro.getWarameittugyi());
+ assertEquals("", astro.getWarameittunge());
+ assertEquals("", astro.getYatpote());
+ assertEquals("", astro.getThamaphyu());
+ assertEquals("", astro.getYatyotema());
+ assertEquals("", astro.getShanyat());
+
+ }
+
+ @Test
+ public void assertBooleanTest() {
+ Astro astro = Astro.of(myanmarDate);
+
+ Assert.assertFalse(astro.isAmyeittasote());
+ Assert.assertTrue(astro.isMahayatkyan());
+ Assert.assertTrue(astro.isNagapor());
+ Assert.assertFalse(astro.isShanyat());
+ Assert.assertTrue(astro.isThamanyo());
+ Assert.assertFalse(astro.isThamaphyu());
+ Assert.assertFalse(astro.isWarameittugyi());
+ Assert.assertFalse(astro.isWarameittunge());
+ Assert.assertFalse(astro.isYatpote());
+ Assert.assertFalse(astro.isYatyotema());
+ Assert.assertFalse(astro.isYatyaza());
+ Assert.assertFalse(astro.isPyathada());
+ Assert.assertFalse(astro.isSabbath());
+ }
+
+ @Test
+ public void astroTestTwo() {
+ MyanmarDate myanmarDate = MyanmarDate.of(LocalDate.of(2024, 1, 4));
+ Astro astro = Astro.of(myanmarDate);
+
+ assertEquals("", astro.getThamanyo());
+ assertEquals("", astro.getNagapor());
+ assertThat(1, is(astro.getMahaboteValue()));
+ assertEquals("Atun", astro.getMahabote());
+ assertEquals("", astro.getMahayatkyan());
assertThat(2, is(astro.getNakhatValue()));
- Assert.assertEquals("Human", astro.getNakhat());
- Assert.assertEquals("Mrigasiras", astro.getYearName());
+ assertEquals("Human", astro.getNakhat());
+ assertEquals("Jyeshtha", astro.getYearName());
+
+ Assert.assertFalse(astro.isAmyeittasote());
+ Assert.assertFalse(astro.isMahayatkyan());
+ Assert.assertFalse(astro.isNagapor());
+ Assert.assertFalse(astro.isShanyat());
+ Assert.assertFalse(astro.isThamanyo());
+ Assert.assertFalse(astro.isThamaphyu());
+ Assert.assertFalse(astro.isWarameittugyi());
+ Assert.assertTrue(astro.isWarameittunge());
+ Assert.assertTrue(astro.isYatpote());
+ Assert.assertFalse(astro.isYatyotema());
+ Assert.assertFalse(astro.isYatyaza());
+ Assert.assertTrue(astro.isPyathada());
+ Assert.assertTrue(astro.isSabbath());
+ }
+
+ @Test
+ public void testAfternoonPyathada(){
+ MyanmarDate myanmarDate = MyanmarDate.of(2024, 3, 13);
+ Astro astro = Astro.of(myanmarDate);
+ assertEquals("ရက်ရာဇာ၊ မွန်းလွဲ ပြဿဒါး", astro.getAstrologicalDay(Language.MYANMAR));
+ }
+
+ @Test
+ public void equalsTest() {
+ MyanmarDate myanmarDate = MyanmarDate.of(LocalDate.of(2024, 1, 4));
+ Astro astro = Astro.of(myanmarDate);
+ MyanmarDate myanmarDateTwo = MyanmarDate.of(LocalDateTime.of(2024, 1, 4, 0, 0, 0));
+ Astro astroResult = Astro.of(myanmarDateTwo);
+ assertEquals(astro, astroResult);
+ }
+
+ @Test
+ public void hashCodeTest() {
+ MyanmarDate myanmarDate = MyanmarDate.of(LocalDate.of(2024, 1, 4));
+ Astro astro = Astro.of(myanmarDate);
+ assertThat(-463661218, is(astro.hashCode()));
}
}
diff --git a/src/test/java/mmcalendar/ConfigTest.java b/src/test/java/mmcalendar/ConfigTest.java
index 614120b..ccd51e0 100644
--- a/src/test/java/mmcalendar/ConfigTest.java
+++ b/src/test/java/mmcalendar/ConfigTest.java
@@ -1,11 +1,19 @@
package mmcalendar;
+import org.junit.BeforeClass;
import org.junit.Test;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
public class ConfigTest {
+ @BeforeClass
+ public static void beforeClass() {
+ Config.getInstance();
+ }
+
@Test
public void initTest() {
Config.initDefault(
@@ -19,6 +27,8 @@ public void initTest() {
Language language = Config.getInstance().getLanguage();
assertEquals(CalendarType.GREGORIAN, calendarType);
+ assertEquals("Gregorian", calendarType.getLabel());
+ assertThat(1, is(calendarType.getNumber()));
assertEquals(Language.MON, language);
}
@@ -37,4 +47,14 @@ public void initFunctional() {
assertEquals(CalendarType.JULIAN, calendarType);
assertEquals(Language.TAI, language);
}
+
+ @Test(expected = IllegalArgumentException.class)
+ public void buildExpection() {
+ Config.initDefault(
+ it ->
+ it.setCalendarType(null)
+ .setLanguage(null)
+
+ );
+ }
}
diff --git a/src/test/java/mmcalendar/DateTimeUtilsTest.java b/src/test/java/mmcalendar/DateTimeUtilsTest.java
deleted file mode 100644
index cea910d..0000000
--- a/src/test/java/mmcalendar/DateTimeUtilsTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package mmcalendar;
-
-import mmcalendar.util.DateTimeUtils;
-import org.junit.Test;
-
-import java.time.LocalDate;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertEquals;
-
-public class DateTimeUtilsTest {
-
- @Test
- public void toJulian() {
- LocalDate localDate = LocalDate.of(2023, 12, 30);
- double jd = DateTimeUtils.toJulian(localDate);
- assertThat(2460309.0, is(jd));
- }
-
- @Test
- public void unixTimeToJulian() {
- long unix = 1703895000;
- double jd = DateTimeUtils.unixTimeToJulian(unix);
- assertThat(2460308.5069444445, is(jd));
- }
-
- @Test
- public void julianToUnixTime() {
- double jd = 2460308.5069444445;
- long unix = DateTimeUtils.julianToUnixTime(jd);
- assertThat(1703895000L, is(unix));
- }
-
- @Test
- public void u2jVsj2u() {
- long unix = 1703895000;
- double jd = DateTimeUtils.unixTimeToJulian(unix);
- long reverse = DateTimeUtils.julianToUnixTime(jd);
- assertEquals(unix, reverse);
- }
-
-}
diff --git a/src/test/java/mmcalendar/HolidayCalculatorTest.java b/src/test/java/mmcalendar/HolidayCalculatorTest.java
index 24e0c0e..24b898d 100644
--- a/src/test/java/mmcalendar/HolidayCalculatorTest.java
+++ b/src/test/java/mmcalendar/HolidayCalculatorTest.java
@@ -3,31 +3,32 @@
import org.junit.Assert;
import org.junit.Test;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import static org.junit.Assert.assertEquals;
+
public class HolidayCalculatorTest {
@Test
public void englishHoliday() {
List holiday = HolidayCalculator.englishHoliday(2017, 1, 4);
List actualList = Collections.singletonList("Independence Day");
- Assert.assertEquals(actualList, holiday);
+ assertEquals(actualList, holiday);
}
@Test
public void myanmarHoliday() {
List holiday = HolidayCalculator.myanmarHoliday(1385, 4, 15, 1);
List actualList = Collections.singletonList("Start of Buddhist Lent");
- Assert.assertEquals(actualList, holiday);
+ assertEquals(actualList, holiday);
}
@Test
public void thingyan() {
List thingyan = HolidayCalculator.thingyan(2460052, 1385, 0);
List actualList = Collections.singletonList("Myanmar New Year Day");
- Assert.assertEquals(actualList, thingyan);
+ assertEquals(actualList, thingyan);
}
@Test
@@ -35,7 +36,7 @@ public void getHoliday() {
MyanmarDate myanmarDate = MyanmarDate.of(2460052);
List thingyan = HolidayCalculator.getHoliday(myanmarDate);
List actualList = Collections.singletonList("Myanmar New Year Day");
- Assert.assertEquals(actualList, thingyan);
+ assertEquals(actualList, thingyan);
}
@Test
@@ -45,4 +46,14 @@ public void isHoliday() {
Assert.assertTrue("holiday", isHoliday);
}
+ @Test
+ public void getAnniversary() {
+ MyanmarDate newYearDate = MyanmarDate.of(2017, 1, 1);
+ String newYear = HolidayCalculator.getAnniversary(newYearDate).get(0);
+ assertEquals("New Year Day", newYear);
+
+ MyanmarDate aungSanBDDate = MyanmarDate.of(2024, 2, 13);
+ String aungSanBD = HolidayCalculator.getAnniversary(aungSanBDDate).get(0);
+ assertEquals("G. Aung San BD", aungSanBD);
+ }
}
diff --git a/src/test/java/mmcalendar/JavaDateTimeTest.java b/src/test/java/mmcalendar/JavaDateTimeTest.java
index b2d31dc..bed7396 100644
--- a/src/test/java/mmcalendar/JavaDateTimeTest.java
+++ b/src/test/java/mmcalendar/JavaDateTimeTest.java
@@ -19,7 +19,7 @@ public void checkWithSystemTimeCalendar() {
MyanmarDate myanmarDate = MyanmarDate.of(localDateTime);
Assert.assertEquals(1385, myanmarDate.getYearValue());
- WesternDate westernDate = WesternDateKernel.julianToWestern(myanmarDate.getJulianDayNumber(), CalendarType.ENGLISH);
+ WesternDate westernDate = WesternDate.of(myanmarDate.getJulianDayNumber(), CalendarType.ENGLISH);
Assert.assertEquals(2024, westernDate.getYear());
}
diff --git a/src/test/java/mmcalendar/LanguageTest.java b/src/test/java/mmcalendar/LanguageTest.java
new file mode 100644
index 0000000..fbc9adb
--- /dev/null
+++ b/src/test/java/mmcalendar/LanguageTest.java
@@ -0,0 +1,17 @@
+package mmcalendar;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class LanguageTest {
+
+ @Test
+ public void testLanguage() {
+ Language language = Language.MYANMAR;
+
+ assertEquals(1, language.getLanguageIndex());
+ assertEquals("၊ ", language.getPunctuationMark());
+ assertEquals("။ ", language.getPunctuation());
+ }
+}
diff --git a/src/test/java/mmcalendar/MyanmarCalendarKernelTest.java b/src/test/java/mmcalendar/MyanmarCalendarKernelTest.java
index 9ed2a1f..4ae3258 100644
--- a/src/test/java/mmcalendar/MyanmarCalendarKernelTest.java
+++ b/src/test/java/mmcalendar/MyanmarCalendarKernelTest.java
@@ -16,11 +16,11 @@ public class MyanmarCalendarKernelTest {
@BeforeClass
public static void beforeClass() {
-// Config.initDefault(
-// new Config.Builder()
-// .setCalendarType(CalendarType.ENGLISH)
-// .setLanguage(Language.ENGLISH)
-// .build());
+ Config.initDefault(
+ new Config.Builder()
+ .setCalendarType(CalendarType.ENGLISH)
+ .setLanguage(Language.MYANMAR)
+ .build());
// သာသနာနှစ် ၂၅၆၇ ခု, မြန်မာနှစ် ၁၃၈၅ ခု, တန်ခူး လကွယ် ရက် အင်္ဂါနေ့
int jdn = 2460053;
@@ -87,10 +87,54 @@ public void calculateRelatedMyanmarMonths() {
Assert.assertEquals("Nayon", myanmarMonth.getCalculationMonthName());
}
+
+ @Test
+ public void getCalendarHeaderForWesternStyle() {
+ String head = MyanmarCalendarKernel.getCalendarHeaderForWesternStyle(2024, 4);
+ String actual = "သာသနာနှစ် ၂၅၆၇ - ၂၅၆၈ ခု မြန်မာနှစ် ၁၃၈၅ - ၁၃၈၆ ခု တပေါင်း - တန်ခူး";
+ Assert.assertEquals(actual, head);
+ }
+
@Test
public void getCalendarHeader() {
- String head = MyanmarCalendarKernel.getCalendarHeader(1380, 2, 14);
- String actual = "သာသနာနှစ် ၂၅၆၂ ခု မြန်မာနှစ် ၁၃၈၀ ခု ကဆုန် - နယုန်";
+ String head = MyanmarCalendarKernel.getCalendarHeader(1380, 2);
+ String actual = "သာသနာနှစ် ၂၅၆၁ - ၂၅၆၂ ခု မြန်မာနှစ် ၁၃၇၉ - ၁၃၈၀ ခု နှောင်းကဆုန် - ကဆုန်";
+ Assert.assertEquals(actual, head);
+ }
+
+ @Test
+ public void getCalendarHeader2() {
+ String monthName = "Tagu";
+ int monthIndex = MyanmarDateKernel.searchMyanmarMonthNumber(monthName);
+ String head = MyanmarCalendarKernel.getCalendarHeader(1385, monthIndex);
+ String actual = "သာသနာနှစ် ၂၅၆၆ - ၂၅၆၇ ခု မြန်မာနှစ် ၁၃၈၄ - ၁၃၈၅ ခု နှောင်းတန်ခူး - တန်ခူး";
+ Assert.assertEquals(actual, head);
+ }
+
+ @Test
+ public void getHeaderForBuddhistEra() {
+ MyanmarDate startDate = MyanmarDate.of(2024, 1, 1);
+ MyanmarDate endDate = MyanmarDate.of(2024, 4, 30);
+ String head = MyanmarCalendarKernel.getHeaderForBuddhistEra(startDate, endDate, Language.MYANMAR);
+ String actual = "သာသနာနှစ် ၂၅၆၇ - ၂၅၆၈ ခု";
+ Assert.assertEquals(actual, head);
+ }
+
+ @Test
+ public void getHeaderForMyanmarYear() {
+ MyanmarDate startDate = MyanmarDate.of(2024, 4, 1);
+ MyanmarDate endDate = MyanmarDate.of(2024, 4, 30);
+ String head = MyanmarCalendarKernel.getHeaderForMyanmarYear(startDate, endDate, Language.MYANMAR);
+ String actual = "မြန်မာနှစ် ၁၃၈၅ - ၁၃၈၆ ခု";
+ Assert.assertEquals(actual, head);
+ }
+
+ @Test
+ public void getHeaderForMyanmarMonth() {
+ MyanmarDate startDate = MyanmarDate.of(2024, 4, 1);
+ MyanmarDate endDate = MyanmarDate.of(2024, 4, 30);
+ String head = MyanmarCalendarKernel.getHeaderForMyanmarMonth(startDate, endDate, Language.MYANMAR);
+ String actual = "တပေါင်း - တန်ခူး";
Assert.assertEquals(actual, head);
}
@@ -101,6 +145,12 @@ public void calculateMyanmarYearLength() {
assertThat(385, is(yearLength));
}
+ @Test
+ public void calculateYearType() {
+ int yearType = MyanmarCalendarKernel.calculateYearType(myanmarDate.getYearValue());
+ assertThat(2, is(yearType));
+ }
+
@Test
public void calculateLengthOfMonth() {
// length of the month
@@ -128,4 +178,11 @@ public void calculateDayOfMonthByYearType() {
int monthDay = MyanmarCalendarKernel.calculateDayOfMonthByYearType(myanmarDate.getYearType(), myanmarDate.getMonth(), myanmarDate.getMoonPhaseValue(), myanmarDate.getFortnightDayValue());
assertThat(29, is(monthDay));
}
+
+ @Test
+ public void calculateDayOfMonth() {
+ // day of month
+ int monthDay = MyanmarCalendarKernel.calculateDayOfMonth(myanmarDate.getYearValue(), myanmarDate.getMonth(), myanmarDate.getMoonPhaseValue(), myanmarDate.getFortnightDayValue());
+ assertThat(29, is(monthDay));
+ }
}
diff --git a/src/test/java/mmcalendar/MyanmarDateKernelTest.java b/src/test/java/mmcalendar/MyanmarDateKernelTest.java
index 1510c95..2e8e4c3 100644
--- a/src/test/java/mmcalendar/MyanmarDateKernelTest.java
+++ b/src/test/java/mmcalendar/MyanmarDateKernelTest.java
@@ -5,21 +5,18 @@
import org.junit.BeforeClass;
import org.junit.Test;
-import java.time.LocalDateTime;
+import java.time.DateTimeException;
import java.util.Map;
-
+import static mmcalendar.Constants.EMA;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
-
-import static org.hamcrest.Matchers.hasItem;
import static org.junit.Assert.assertEquals;
public class MyanmarDateKernelTest {
@BeforeClass
public static void beforeClass() {
- // Config.init(CalendarType.ENGLISH, Language.ENGLISH);
Config.initDefault(
new Config.Builder()
.setCalendarType(CalendarType.ENGLISH)
@@ -102,16 +99,33 @@ public void getJulianDayNumber() {
double julianDayNumber = MyanmarDateKernel.getJulianDayNumber(year, myanmarMonthName, day);
- assertEquals(2458252.0, julianDayNumber, 0.0001);
+ assertEquals(2458252.0, julianDayNumber, 0.0001);
+ }
- MyanmarDate myanmarDate = MyanmarDate.of(julianDayNumber);
+ @Test(expected = DateTimeException.class)
+ public void getJulianDayNumberException() {
+ MyanmarDateKernel.getJulianDayNumber(2024, "hello", 1);
+ }
- Language language = Language.MYANMAR;
- String aspects = "သာသနာနှစ် ၂၅၆၂ ခု, မြန်မာနှစ် ၁၃၈၀ ခု, ကဆုန် လဆုတ် ၁၄ ရက် တနင်္ဂနွေ နေ့";
- assertEquals(aspects, myanmarDate.toString(language));
+ @Test
+ public void searchMyanmarMonth() {
+ for (int i = 0; i < EMA.length; i++) {
+ int monthIndex = MyanmarDateKernel.searchMyanmarMonthNumber(EMA[i]);
+ assertThat(i, is(monthIndex));
+ }
+
+ assertThat(-1, is(MyanmarDateKernel.searchMyanmarMonthNumber("hello")));
+ }
+
+ @Test
+ public void searchMoonPhase() {
- LocalDateTime aspectDate = LocalDateTime.of(2018, 5, 13, 12, 0);
- assertEquals(aspectDate, myanmarDate.toMyanmarLocalDateTime());
+ String[] moonPhase = {"waxing", "full moon", "waning", "new moon"};
+ for (int i = 0; i < moonPhase.length; i++) {
+ int index = MyanmarDateKernel.searchMoonPhase(moonPhase[i]);
+ assertThat(i, is(index));
+ }
+ assertThat(-1, is(MyanmarDateKernel.searchMoonPhase("hello")));
}
}
diff --git a/src/test/java/mmcalendar/MyanmarDateTest.java b/src/test/java/mmcalendar/MyanmarDateTest.java
index e68b9f7..702047c 100644
--- a/src/test/java/mmcalendar/MyanmarDateTest.java
+++ b/src/test/java/mmcalendar/MyanmarDateTest.java
@@ -1,10 +1,44 @@
package mmcalendar;
+import org.junit.AfterClass;
import org.junit.Assert;
+import org.junit.BeforeClass;
import org.junit.Test;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.util.Calendar;
+import java.util.Date;
+
+import static mmcalendar.Constants.MYANMAR_ZONE_ID;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.*;
+
public class MyanmarDateTest {
+ @BeforeClass
+ public static void beforeClass() {
+
+ Config.initDefault(
+ new Config.Builder()
+ .setCalendarType(CalendarType.ENGLISH)
+ .setLanguage(Language.MYANMAR)
+ .build());
+
+ }
+
+ // execute after class
+ @AfterClass
+ public static void afterClass() {
+ Config.initDefault(
+ new Config.Builder()
+ .setCalendarType(CalendarType.ENGLISH)
+ .setLanguage(Language.MYANMAR)
+ .build());
+ }
+
@Test
public void outputsInEnglish() {
MyanmarDate myanmarDate = MyanmarDate.of(1989, 4, 15);
@@ -21,6 +55,183 @@ public void outputsInMyanmarBurmese() {
Language language = Language.MYANMAR;
String aspectMyanmarResult = "သာသနာနှစ် ၂၅၃၂ ခု, မြန်မာနှစ် ၁၃၅၀ ခု, နှောင်းတန်ခူး လဆန်း ၁၀ ရက် စနေနေ့";
Assert.assertEquals(aspectMyanmarResult, myanmarDate.format(format, language));
+ assertTrue(myanmarDate.isWeekend());
+ assertEquals("Late", myanmarDate.getMnt(Language.ENGLISH));
+ }
+
+ @Test
+ public void objectCreation() {
+ LocalDateTime localDateTime = LocalDateTime.now(MYANMAR_ZONE_ID);
+ MyanmarDate myanmarDate = MyanmarDate.of(localDateTime);
+ MyanmarDate myanmarDate2 = MyanmarDate.create(myanmarDate.getYearValue(), myanmarDate.getMonthName(Language.ENGLISH), myanmarDate.getMoonPhase(Language.ENGLISH), myanmarDate.getFortnightDayValue());
+ assertTrue(myanmarDate.hasSameDay(myanmarDate2));
+ MyanmarDate myanmarDate3 = MyanmarDate.of(myanmarDate.getJulianDayNumber());
+ assertTrue(myanmarDate.hasSameDay(myanmarDate3));
+
+ MyanmarDate myanmarDate4 = MyanmarDate.ofEpochSecond(localDateTime.toEpochSecond(ZoneOffset.ofTotalSeconds(0)), MYANMAR_ZONE_ID);
+ assertTrue(myanmarDate.hasSameDay(myanmarDate4));
+
+ Calendar calendar = Calendar.getInstance();
+ MyanmarDate myanmarDate5 = MyanmarDate.of(calendar);
+ assertTrue(myanmarDate.hasSameDay(myanmarDate5));
+
+ MyanmarDate myanmarDateFromJavaDate = MyanmarDate.of(new Date());
+ assertTrue(myanmarDate.hasSameDay(myanmarDateFromJavaDate));
+
+ LocalDateTime returnMyanmarLocalDate = myanmarDate.toMyanmarLocalDateTime();
+
+ assertThat(localDateTime.getYear(), is(returnMyanmarLocalDate.getYear()));
+ assertThat(localDateTime.getMonthValue(), is(returnMyanmarLocalDate.getMonthValue()));
+ assertThat(localDateTime.getDayOfMonth(), is(returnMyanmarLocalDate.getDayOfMonth()));
+ assertThat(localDateTime.getHour(), is(returnMyanmarLocalDate.getHour()));
+ assertThat(localDateTime.getMinute(), is(returnMyanmarLocalDate.getMinute()));
+ assertThat(localDateTime.getSecond(), is(returnMyanmarLocalDate.getSecond()));
+ }
+
+ @Test
+ public void toLocalDateTimeTest() {
+ LocalDateTime localDateTime = LocalDateTime.now(MYANMAR_ZONE_ID);
+ MyanmarDate myanmarDate = MyanmarDate.of(localDateTime);
+
+ LocalDateTime returnMyanmarLocalDateTime = myanmarDate.toMyanmarLocalDateTime();
+
+ assertThat(localDateTime.getYear(), is(returnMyanmarLocalDateTime.getYear()));
+ assertThat(localDateTime.getMonthValue(), is(returnMyanmarLocalDateTime.getMonthValue()));
+ assertThat(localDateTime.getDayOfMonth(), is(returnMyanmarLocalDateTime.getDayOfMonth()));
+ assertThat(localDateTime.getHour(), is(returnMyanmarLocalDateTime.getHour()));
+ assertThat(localDateTime.getMinute(), is(returnMyanmarLocalDateTime.getMinute()));
+ assertThat(localDateTime.getSecond(), is(returnMyanmarLocalDateTime.getSecond()));
+
+ LocalDateTime localDateTimeMM = myanmarDate.toLocalDateTime(MYANMAR_ZONE_ID);
+ assertEquals(returnMyanmarLocalDateTime, localDateTimeMM);
+
+ LocalDate returnMyanmarLocalDate = myanmarDate.toMyanmarLocalDate();
+ LocalDate localDate = myanmarDate.toLocalDate(MYANMAR_ZONE_ID);
+
+ assertEquals(returnMyanmarLocalDate, localDate);
+ }
+
+ @Test
+ public void timeTest() {
+ LocalDateTime localDateTime = LocalDateTime.now(MYANMAR_ZONE_ID);
+ MyanmarDate myanmarDate = MyanmarDate.of(localDateTime, MYANMAR_ZONE_ID);
+
+ assertThat(localDateTime.getHour(), is(myanmarDate.getHour()));
+ assertThat(localDateTime.getMinute(), is(myanmarDate.getMinute()));
+ assertThat(localDateTime.getSecond(), is(myanmarDate.getSecond()));
+ }
+
+ @Test
+ public void fieldTest() {
+ // 2023-August-01
+ MyanmarDate myanmarDate = MyanmarDate.of(2460158);
+ assertThat(2567, is(myanmarDate.getBuddhistEraValue()));
+ assertEquals("၂၅၆၇", myanmarDate.getBuddhistEra());
+ assertEquals("၁၃၈၅", myanmarDate.getYear());
+ assertEquals("ဒု", myanmarDate.getMnt());
+ assertEquals("ဒု", myanmarDate.getMnt(Language.MYANMAR));
+ assertEquals("ဒု ဝါဆို", myanmarDate.getMonthName(Language.MYANMAR));
+ assertThat(385, is(myanmarDate.lengthOfYear()));
+ assertEquals("လပြည့်", myanmarDate.getMoonPhase());
+ assertEquals("", myanmarDate.getFortnightDay());
+ assertEquals("အင်္ဂါ", myanmarDate.getWeekDay());
+ assertFalse(myanmarDate.isWeekend());
}
+ @Test
+ public void formatTest() {
+ MyanmarDate myanmarDate = MyanmarDate.of(2024, 1, 6);
+ String format = "B y k၊ M p f r E n";
+ String expected = "မြန်မာနှစ် ၁၃၈၅ ခု၊ နတ်တော် လဆုတ် ၁၀ ရက် စနေ နေ့";
+ assertEquals(expected, myanmarDate.format(format, Language.MYANMAR));
+ assertEquals(expected, myanmarDate.format(format));
+ }
+
+ @Test
+ public void formatExceptionTest() {
+ MyanmarDate myanmarDate = MyanmarDate.of(2024, 1, 6);
+ assertThrows(IllegalArgumentException.class, () -> {
+ myanmarDate.format(null, Language.MYANMAR);
+ });
+ assertThrows(IllegalArgumentException.class, () -> {
+ myanmarDate.format("s", null);
+ });
+ }
+
+ @Test
+ public void hasSameDay(){
+ MyanmarDate myanmarDate1 = MyanmarDate.of(2024, 1, 6);
+ MyanmarDate myanmarDate2 = MyanmarDate.of(2024, 1, 7);
+ assertFalse(myanmarDate1.hasSameDay(myanmarDate2));
+
+ MyanmarDate myanmarDate3 = MyanmarDate.of(2024, 1, 6);
+ MyanmarDate myanmarDate4 = MyanmarDate.of(2024, 2, 6);
+ assertFalse(myanmarDate3.hasSameDay(myanmarDate4));
+
+ MyanmarDate myanmarDate5 = MyanmarDate.of(2023, 1, 6);
+ MyanmarDate myanmarDate6 = MyanmarDate.of(2024, 1, 6);
+ assertFalse(myanmarDate5.hasSameDay(myanmarDate6));
+ }
+
+ @Test
+ public void hashEqual(){
+ MyanmarDate myanmarDate1 = MyanmarDate.of(2024, 1, 6);
+ assertThat(806872610, is(myanmarDate1.hashCode()));
+ MyanmarDate myanmarDate2 = MyanmarDate.of(2460316);
+ assertEquals(myanmarDate1, myanmarDate2);
+ }
+
+ @Test
+ public void startMyanmarDate() {
+ MyanmarDate myanmarDate = MyanmarDate.of(1954900.0);
+ String expected = "သာသနာနှစ် ၁၁၈၄ ခု, မြန်မာနှစ် ၂ ခု, တန်ခူး လဆုတ် ၁၁ ရက် ကြာသပတေး နေ့";
+ assertEquals(expected, myanmarDate.toString());
+ assertEquals("0640-03-23", myanmarDate.toMyanmarLocalDate().toString());
+
+ }
+
+ @Test
+ public void beforeSkipDay() {
+ LocalDateTime startMyanmarLocalDate = LocalDateTime.of(640, 3, 23, 12, 0);
+
+ LocalDateTime localDateTime = LocalDateTime.of(1752, 9, 2, 12, 0);
+
+ while (startMyanmarLocalDate.isBefore(localDateTime)) {
+
+ startMyanmarLocalDate = startMyanmarLocalDate.plusDays(1);
+ MyanmarDate aspectedMyanmarDate = MyanmarDate.of(startMyanmarLocalDate);
+ WesternDate wd = WesternDate.of(aspectedMyanmarDate.getJulianDayNumber());
+ assertThat(startMyanmarLocalDate.getYear(), is(wd.getYear()));
+ assertThat(startMyanmarLocalDate.getMonthValue(), is(wd.getMonth()));
+ assertThat(startMyanmarLocalDate.getDayOfMonth(), is(wd.getDay()));
+ assertThat(startMyanmarLocalDate.getHour(), is(wd.getHour()));
+ assertThat(startMyanmarLocalDate.getMinute(), is(wd.getMinute()));
+ assertThat(startMyanmarLocalDate.getSecond(), is(wd.getSecond()));
+ }
+ }
+
+ @Test
+ public void afterSkipDay() {
+ // To correct this, the Gregorian calendar was introduced by Pope Gregory XIII in 1582.
+ // The adjustment involved skipping 11 days to bring the calendar back in line with the astronomical year.
+ // In September 1752, the dates were adjusted by omitting the period from September 3rd to September 13th.
+ // So, in that year, September 2nd was followed by September 14th, effectively aligning the calendar with the new Gregorian system.
+ LocalDateTime startMyanmarLocalDate = LocalDateTime.of(1752, 9, 14, 12, 0);
+
+ LocalDateTime localDateTime = LocalDateTime.now(MYANMAR_ZONE_ID);
+
+ while (startMyanmarLocalDate.isBefore(localDateTime)) {
+
+ startMyanmarLocalDate = startMyanmarLocalDate.plusDays(1);
+ MyanmarDate aspectedMyanmarDate = MyanmarDate.of(startMyanmarLocalDate);
+ WesternDate wd = WesternDate.of(aspectedMyanmarDate.getJulianDayNumber());
+
+ assertThat(startMyanmarLocalDate.getYear(), is(wd.getYear()));
+ assertThat(startMyanmarLocalDate.getMonthValue(), is(wd.getMonth()));
+ assertThat(startMyanmarLocalDate.getDayOfMonth(), is(wd.getDay()));
+ assertThat(startMyanmarLocalDate.getHour(), is(wd.getHour()));
+ assertThat(startMyanmarLocalDate.getMinute(), is(wd.getMinute()));
+ assertThat(startMyanmarLocalDate.getSecond(), is(wd.getSecond()));
+ }
+ }
}
diff --git a/src/test/java/mmcalendar/MyanmarMonthsTest.java b/src/test/java/mmcalendar/MyanmarMonthsTest.java
index d108ead..2afc99c 100644
--- a/src/test/java/mmcalendar/MyanmarMonthsTest.java
+++ b/src/test/java/mmcalendar/MyanmarMonthsTest.java
@@ -24,9 +24,8 @@ public void getMyanmarMonth() {
public void getAllMonthNames() {
int year = 1381;
List myanmarNameList = calculateRelatedMyanmarMonthNames(year);
- myanmarNameList.forEach(System.out::println);
- String[] aspects = {
+ final String[] aspects = {
"Tagu",
"Kason",
"Nayon",
@@ -45,6 +44,40 @@ public void getAllMonthNames() {
assertArrayEquals(aspects, myanmarNameList.toArray());
}
+ @Test
+ public void getAllMonthNamesTai() {
+ int myear = 1381;
+ MyanmarMonths myanmarMonths = MyanmarCalendarKernel.calculateRelatedMyanmarMonths(myear, 0);
+ List myanmarNameList = myanmarMonths.getMonthNameList(Language.TAI);
+
+ final String[] taiMonthNames = {"ႁႃႈ", "ႁူၵ်း", "ၸဵတ်း", "ပႅတ်ႇ", "ၵဝ်ႈ",
+ "သိပ်း", "သိပ်းဢဵတ်း", "သိပ်းသွင်", "ၸဵင်", "ၵမ်", "သၢမ်", "သီႇ", "ဝၢႆးႁႃႈ",
+ };
+
+ assertArrayEquals(taiMonthNames, myanmarNameList.toArray());
+
+ final String[] monthNames = {
+ "Tagu", "Kason", "Nayon", "Waso", "Wagaung", "Tawthalin", "Thadingyut",
+ "Tazaungmon", "Nadaw", "Pyatho", "Tabodwe", "Tabaung", "Late Tagu",
+ };
+
+ assertArrayEquals(monthNames, myanmarMonths.getMonthNameList(Language.ENGLISH).toArray());
+ }
+
+ @Test
+ public void getAllMonthNamesLate() {
+ int myear = 1385;
+ MyanmarMonths myanmarMonths = MyanmarCalendarKernel.calculateRelatedMyanmarMonths(myear, 13);
+
+ final String[] monthNames = {
+ "Tagu", "Kason", "Nayon", "First Waso", "Second Waso", "Wagaung",
+ "Tawthalin", "Thadingyut",
+ "Tazaungmon", "Nadaw", "Pyatho", "Tabodwe", "Tabaung", "Late Tagu",
+ };
+
+ assertArrayEquals(monthNames, myanmarMonths.getMonthNameList(Language.ENGLISH).toArray());
+ }
+
public static List calculateRelatedMyanmarMonthNames(int myear) {
return MyanmarCalendarKernel.calculateRelatedMyanmarMonths(myear, 0).getMonthNameList();
}
diff --git a/src/test/java/mmcalendar/MyanmarThingyanDateTimeTest.java b/src/test/java/mmcalendar/MyanmarThingyanDateTimeTest.java
index 241d907..02242c4 100644
--- a/src/test/java/mmcalendar/MyanmarThingyanDateTimeTest.java
+++ b/src/test/java/mmcalendar/MyanmarThingyanDateTimeTest.java
@@ -4,9 +4,9 @@
import java.time.LocalTime;
import java.time.ZonedDateTime;
-import java.util.List;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
public class MyanmarThingyanDateTimeTest {
@@ -35,4 +35,20 @@ public void create() {
ZonedDateTime zonedDateTime = myanmarThingyanDateTime.getAkyaTime().toMyanmarZonedDateTime();
assertEquals("2024-04-14T00:24:45+06:30[Asia/Rangoon]", zonedDateTime.toString());
}
+
+ @Test
+ public void calculateDoubleAkyatDay() {
+ MyanmarThingyanDateTime thingyan = MyanmarThingyanDateTime.of(1382);
+
+ MyanmarDate akyatDaate1 = thingyan.getAkyatDays()[0];
+ MyanmarDate akyatDaate2 = thingyan.getAkyatDays()[1];
+
+ String monthName = LanguageTranslator.translate(akyatDaate1.getMonthName(), Language.MYANMAR, Language.ENGLISH);
+
+ MyanmarDate expectedDay1 = MyanmarDate.create(akyatDaate1.getYearValue(), monthName, akyatDaate1.getDayOfMonth());
+ MyanmarDate expectedDay2 = MyanmarDate.create(akyatDaate2.getYearValue(), akyatDaate2.getMonth(), akyatDaate2.getDayOfMonth());
+
+ assertTrue(akyatDaate1.hasSameDay(expectedDay1));
+ assertTrue(akyatDaate2.hasSameDay(expectedDay2));
+ }
}
diff --git a/src/test/java/mmcalendar/ThingyanTest.java b/src/test/java/mmcalendar/ThingyanTest.java
index 8da4912..7c22d08 100644
--- a/src/test/java/mmcalendar/ThingyanTest.java
+++ b/src/test/java/mmcalendar/ThingyanTest.java
@@ -1,19 +1,42 @@
package mmcalendar;
-import static org.junit.Assert.assertEquals;
-
import org.junit.Test;
+import java.time.DateTimeException;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
public class ThingyanTest {
- @Test
- public void calculate() {
- Thingyan thingyan = Thingyan.of(1379);
-
- assertEquals(2457858.0, thingyan.getAkyaDay(), 0);
- assertEquals(2457857.7058919813, thingyan.getAkyaTime(), 0);
+ @Test(expected = DateTimeException.class)
+ public void catchException() {
+ Thingyan.of(1099);
+ }
+
+ @Test
+ public void calculate() {
+ Thingyan thingyan = Thingyan.of(1379);
+
+ assertEquals(2457858.0, thingyan.getAkyaDay(), 0);
+ assertEquals(2457857.7058919813, thingyan.getAkyaTime(), 0);
+
+ assertEquals(2457860.0, thingyan.getAtatDay(), 0);
+ assertEquals(2457859.875810963, thingyan.getAtatTime(), 0);
+ }
+
+ @Test
+ public void calculateDoubleAkyatDay() {
+ Thingyan thingyan = Thingyan.of(1382);
+
+ assertEquals(2458953.0, thingyan.getAkyaDay(), 0);
+ assertEquals(2458953.4821614255, thingyan.getAkyaTime(), 0);
+
+ assertEquals(2458956.0, thingyan.getAtatDay(), 0);
+ assertEquals(2458955.6520804074, thingyan.getAtatTime(), 0);
+
+ double[] akyatDays = {2458954.0, 2458955.0};
- assertEquals(2457860.0, thingyan.getAtatDay(), 0);
- assertEquals(2457859.875810963, thingyan.getAtatTime(), 0);
- }
+ assertArrayEquals(akyatDays, thingyan.getAkyatDay(), 0);
+ }
}
diff --git a/src/test/java/mmcalendar/WesternDateConverterTest.java b/src/test/java/mmcalendar/WesternDateConverterTest.java
deleted file mode 100644
index 6b0cde7..0000000
--- a/src/test/java/mmcalendar/WesternDateConverterTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package mmcalendar;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-
-import org.junit.Test;
-
-public class WesternDateConverterTest {
-
- @Test
- public void julianToWestern() {
-
- double jd = 2457857.7058912036;
- WesternDate westernDate = WesternDateKernel.julianToWestern(jd, Config.getInstance().getCalendarType());
-
- assertThat(2017, is(westernDate.getYear()));
- assertThat(4, is(westernDate.getMonth()));
- assertThat(14, is(westernDate.getDay()));
- assertThat(4, is(westernDate.getHour()));
- assertThat(56, is(westernDate.getMinute()));
- assertThat(29, is(westernDate.getSecond()));
-
- double result = WesternDateKernel.westernToJulian(westernDate, Config.getInstance().getCalendarType(), 0);
-
- assertThat(jd, is(result));
-
- }
-}
diff --git a/src/test/java/mmcalendar/WesternDateKernelTest.java b/src/test/java/mmcalendar/WesternDateKernelTest.java
index d6cf950..cd6fa83 100644
--- a/src/test/java/mmcalendar/WesternDateKernelTest.java
+++ b/src/test/java/mmcalendar/WesternDateKernelTest.java
@@ -50,6 +50,8 @@ public void getJulianDayNumberOfStartOfMonth() {
public void getLengthOfMonth() {
assertThat(28, is(WesternDateKernel.getLengthOfMonth(2023, 2, 0)));
assertThat(29, is(WesternDateKernel.getLengthOfMonth(2024, 2, 0)));
+ assertThat(19, is(WesternDateKernel.getLengthOfMonth(1752 , 9, 0)));
+ assertThat(29, is(WesternDateKernel.getLengthOfMonth(1600 , 2, 0)));
}
@Test
diff --git a/src/test/java/mmcalendar/WesternDateTest.java b/src/test/java/mmcalendar/WesternDateTest.java
new file mode 100644
index 0000000..d44ae7d
--- /dev/null
+++ b/src/test/java/mmcalendar/WesternDateTest.java
@@ -0,0 +1,62 @@
+package mmcalendar;
+
+import org.junit.Test;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertEquals;
+
+public class WesternDateTest {
+
+ @Test
+ public void ofMyanmarDate() {
+ MyanmarDate myanmarDate = MyanmarDate.of(2024, 1, 1);
+ WesternDate westernDate = WesternDate.of(myanmarDate);
+ assertThat(2024, is(westernDate.getYear()));
+ assertThat(1, is(westernDate.getMonth()));
+ assertThat(1, is(westernDate.getDay()));
+ assertThat(12, is(westernDate.getHour()));
+ assertThat(0, is(westernDate.getMinute()));
+ assertThat(0, is(westernDate.getSecond()));
+
+ WesternDate westernDate1 = WesternDate.of(myanmarDate, CalendarType.ENGLISH);
+ assertEquals(westernDate, westernDate1);
+ }
+
+ @Test
+ public void of() {
+
+ double jd = 2457857.7058912036;
+ WesternDate westernDate = WesternDate.of(jd, Config.getInstance().getCalendarType());
+
+ assertThat(2017, is(westernDate.getYear()));
+ assertThat(4, is(westernDate.getMonth()));
+ assertThat(14, is(westernDate.getDay()));
+ assertThat(4, is(westernDate.getHour()));
+ assertThat(56, is(westernDate.getMinute()));
+ assertThat(29, is(westernDate.getSecond()));
+
+ double result = westernDate.toJulian(Config.getInstance().getCalendarType(), 0);
+
+ assertThat(jd, is(result));
+ }
+
+ @Test
+ public void to() {
+
+ double jd = 2457857.7058912036;
+ WesternDate westernDate = WesternDate.of(jd);
+
+ assertThat(2017, is(westernDate.getYear()));
+ assertThat(4, is(westernDate.getMonth()));
+ assertThat(14, is(westernDate.getDay()));
+ assertThat(4, is(westernDate.getHour()));
+ assertThat(56, is(westernDate.getMinute()));
+ assertThat(29, is(westernDate.getSecond()));
+
+ double result = westernDate.toJulian();
+
+ assertThat(jd, is(result));
+
+ }
+}
diff --git a/src/test/java/mmcalendar/WesternDateTestSuite.java b/src/test/java/mmcalendar/WesternDateTestSuite.java
index 2973387..f7e6364 100644
--- a/src/test/java/mmcalendar/WesternDateTestSuite.java
+++ b/src/test/java/mmcalendar/WesternDateTestSuite.java
@@ -6,7 +6,7 @@
@RunWith(Suite.class)
@Suite.SuiteClasses({
- WesternDateConverterTest.class,
+ WesternDateTest.class,
WesternDateKernelTest.class
})
public class WesternDateTestSuite {