Skip to content

Commit 59053a6

Browse files
committed
fix leap year issue
1 parent 1ca1b0a commit 59053a6

File tree

7 files changed

+223
-171
lines changed

7 files changed

+223
-171
lines changed

app/src/main/java/ir/hamsaa/MainActivity.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@
1010

1111
import androidx.appcompat.app.AppCompatActivity;
1212

13-
1413
import ir.hamsaa.persiandatepicker.Listener;
1514
import ir.hamsaa.persiandatepicker.PersianDatePickerDialog;
1615
import ir.hamsaa.persiandatepicker.api.PersianPickerDate;
1716
import ir.hamsaa.persiandatepicker.api.PersianPickerListener;
17+
import ir.hamsaa.persiandatepicker.date.PersianDateImpl;
1818
import ir.hamsaa.persiandatepicker.util.PersianCalendar;
19-
import ir.hamsaa.persiandatepicker.util.PersianCalendarUtils;
2019

2120

2221
public class MainActivity extends AppCompatActivity {
@@ -43,13 +42,12 @@ public void showCalendar(View v) {
4342
.setTodayButtonVisible(true)
4443
.setMinYear(1300)
4544
.setAllButtonsTextSize(12)
46-
.setMaxYear(PersianDatePickerDialog.THIS_YEAR)
45+
.setMaxYear(1500)
4746
.setInitDate(1370, 3, 13)
4847
.setActionTextColor(Color.GRAY)
4948
.setTypeFace(typeface)
50-
.setShowDayPicker(false)
51-
52-
.setTitleType(PersianDatePickerDialog.MONTH_YEAR)
49+
// .setShowDayPicker(false)
50+
.setTitleType(PersianDatePickerDialog.DAY_MONTH_YEAR)
5351
.setShowInBottomSheet(true)
5452
.setListener(new PersianPickerListener() {
5553
@Override
@@ -58,7 +56,7 @@ public void onDateSelected(PersianPickerDate persianPickerDate) {
5856
Log.d(TAG, "onDateSelected: " + persianPickerDate.getGregorianDate());//Mon Jun 03 10:57:28 GMT+04:30 1991
5957
Log.d(TAG, "onDateSelected: " + persianPickerDate.getPersianLongDate());// دوشنبه 13 خرداد 1370
6058
Log.d(TAG, "onDateSelected: " + persianPickerDate.getPersianMonthName());//خرداد
61-
Log.d(TAG, "onDateSelected: " + PersianCalendarUtils.isPersianLeapYear(persianPickerDate.getPersianYear()));//true
59+
Log.d(TAG, "onDateSelected: " + PersianDateImpl.isLeapYear(persianPickerDate.getPersianYear()));//true
6260
Toast.makeText(MainActivity.this, persianPickerDate.getPersianYear() + "/" + persianPickerDate.getPersianMonth() + "/" + persianPickerDate.getPersianDay(), Toast.LENGTH_SHORT).show();
6361
}
6462

persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/PersianDatePicker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ private void updateViewData() {
286286
@Override
287287
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
288288
int year = yearNumberPicker.getValue();
289-
boolean isLeapYear = PersianCalendarUtils.isPersianLeapYear(year);
289+
boolean isLeapYear = PersianDateImpl.isLeapYear(year);
290290

291291
int month = monthNumberPicker.getValue();
292292
int day = dayNumberPicker.getValue();

persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/api/PersianPickerDate.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,6 @@ public interface PersianPickerDate {
3737

3838
long getTimestamp();
3939

40+
boolean isLeapYear();
41+
4042
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package ir.hamsaa.persiandatepicker.date;
2+
3+
import java.util.Arrays;
4+
import java.util.Date;
5+
import java.util.List;
6+
7+
import saman.zamani.persiandate.PersianDate;
8+
9+
public class PersianDateFixedLeapYear extends PersianDate {
10+
11+
private final List<Integer> leapYears = Arrays.asList(
12+
1210, 1214, 1218, 1222, 1226, 1230, 1234, 1238, 1243, 1247, 1251, 1255, 1259, 1263,
13+
1267, 1271, 1276, 1280, 1284, 1288, 1292, 1296, 1300, 1304, 1309, 1313, 1317, 1321,
14+
1325, 1329, 1333, 1337, 1342, 1346, 1350, 1354, 1358, 1362, 1366, 1370, 1375, 1379,
15+
1383, 1387, 1391, 1395, 1399, 1403, 1408, 1412, 1416, 1420, 1424, 1428, 1432, 1436,
16+
1441, 1445, 1449, 1453, 1457, 1461, 1465, 1469, 1474, 1478, 1482, 1486, 1490, 1494,
17+
1498);
18+
19+
20+
public PersianDateFixedLeapYear() {
21+
}
22+
23+
public PersianDateFixedLeapYear(Long timeInMilliSecond) {
24+
super(timeInMilliSecond);
25+
}
26+
27+
public PersianDateFixedLeapYear(Date date) {
28+
super(date);
29+
}
30+
31+
@Override
32+
public boolean isLeap(int year) {
33+
if (year > 1500) {
34+
return super.isLeap(year);
35+
}
36+
return leapYears.contains(year);
37+
}
38+
39+
40+
}

persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/date/PersianDateImpl.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,32 @@
33
import java.util.Date;
44

55
import ir.hamsaa.persiandatepicker.api.PersianPickerDate;
6-
import saman.zamani.persiandate.PersianDate;
76

87
public class PersianDateImpl implements PersianPickerDate {
98

10-
private PersianDate persianDate;
9+
private PersianDateFixedLeapYear persianDate;
1110

1211
public PersianDateImpl() {
13-
persianDate = new PersianDate();
12+
persianDate = new PersianDateFixedLeapYear();
1413
}
1514

1615
@Override
1716
public void setDate(Long timestamp) {
18-
persianDate = new PersianDate(timestamp);
17+
persianDate = new PersianDateFixedLeapYear(timestamp);
1918
}
2019

2120
@Override
2221
public void setDate(Date date) {
23-
persianDate = new PersianDate(date);
22+
persianDate = new PersianDateFixedLeapYear(date);
2423
}
2524

2625
@Override
2726
public void setDate(int persianYear, int persianMonth, int persianDay) {
28-
try{
27+
try {
2928
persianDate.setShYear(persianYear);
3029
persianDate.setShMonth(persianMonth);
3130
persianDate.setShDay(persianDay);
32-
}catch (Exception e){
31+
} catch (Exception e) {
3332
e.printStackTrace();
3433
}
3534
}
@@ -93,4 +92,13 @@ public Date getGregorianDate() {
9392
public long getTimestamp() {
9493
return persianDate.getTime();
9594
}
95+
96+
@Override
97+
public boolean isLeapYear() {
98+
return persianDate.isLeap();
99+
}
100+
101+
public static boolean isLeapYear(int year) {
102+
return new PersianDateFixedLeapYear().isLeap(year);
103+
}
96104
}

persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/util/PersianCalendar.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.util.Locale;
2323
import java.util.TimeZone;
2424

25+
import ir.hamsaa.persiandatepicker.date.PersianDateImpl;
26+
2527
/**
2628
*
2729
* <strong> Persian(Shamsi) calendar </strong>
@@ -175,7 +177,7 @@ protected void calculatePersianDate() {
175177
*/
176178
public boolean isPersianLeapYear() {
177179
// calculatePersianDate();
178-
return PersianCalendarUtils.isPersianLeapYear(this.persianYear);
180+
return PersianDateImpl.isLeapYear(this.persianYear);
179181
}
180182

181183
/**

0 commit comments

Comments
 (0)