Skip to content

Commit 7b37d14

Browse files
committed
1. theme color changed
2. add unix time 3. add h-m-s 4. move validate to idate classes 5. add static default calendar save with shared Preferences 6. add getLongStringMethod() to idate classes
1 parent 0f4330c commit 7b37d14

File tree

12 files changed

+493
-175
lines changed

12 files changed

+493
-175
lines changed

uneversaldatetools/src/main/java/com/ali/uneversaldatetools/date/Calendar.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,26 @@ public enum Calendar {
1111
Hijri(3);
1212

1313
private final int value;
14+
1415
Calendar(int value) {
1516
this.value = value;
1617
}
1718

1819
public int getValue() {
1920
return value;
2021
}
22+
23+
public static Calendar ToCalender(int num) {
24+
switch (num) {
25+
case 0:
26+
return None;
27+
case 1:
28+
return Gregorian;
29+
case 2:
30+
return Jalali;
31+
case 3:
32+
return Hijri;
33+
}
34+
return null;
35+
}
2136
}

uneversaldatetools/src/main/java/com/ali/uneversaldatetools/date/DateConverter.java

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ public static boolean IsHijriLeap(int year) {
4949
}
5050

5151

52-
static int JalaliToDays(int year, int month, int day) {
52+
public static int JalaliToDays(int year, int month, int day) {
5353
return day +
5454
(month - 1 <= 6 ? (month - 1) * 31 : (month - 1) * 30 + 6) +
5555
(year - 1) * 365 +
5656
LeapsJalaliBehind(year - 1);
5757
}
5858

59-
static int GregorianToDays(int year, int month, int day) {
59+
public static int GregorianToDays(int year, int month, int day) {
6060
int[] monthDays = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
6161

6262
return day +
@@ -66,12 +66,13 @@ static int GregorianToDays(int year, int month, int day) {
6666
((month - 1 >= 2) && IsGregorianLeap(year) ? 1 : 0);
6767
}
6868

69-
static int HijriToDays(int year, int month, int day) {
69+
public static int HijriToDays(int year, int month, int day) {
7070
int[] monthDays = {0, 30, 59, 89, 118, 148, 177, 207, 236, 266, 295, 325};
7171

7272
return day + monthDays[month - 1] + (year - 1) * 354 + LeapsHijriBehind(year - 1);
7373
}
7474

75+
7576
static DateModel DaysToJalali(int days) {
7677

7778
DateModel jalali = new DateModel();
@@ -486,4 +487,51 @@ public static DateModel HijriToGregorian(int year, int month, int day) {
486487
return DaysToGregorian(HijriToDays(year, month, day) + 227014);
487488
}
488489

490+
491+
public static DateModel UnixToHijri(int sec, int timeZone) {
492+
sec += timeZone;
493+
DateModel date = DaysToHijri((sec / 86400) + 719163 - 227014);
494+
date.sec = sec % 86400;
495+
date.hour = date.sec / 3600;
496+
date.sec = date.sec % 3600;
497+
date.min = date.sec / 60;
498+
date.sec = date.sec % 60;
499+
return date;
500+
}
501+
502+
public static DateModel UnixToHijri(int sec) {
503+
return UnixToHijri(sec, 0);
504+
}
505+
506+
public static DateModel UnixToJalali(int sec, int timeZone) {
507+
sec += timeZone;
508+
DateModel date = DaysToJalali((sec / 86400) + 719163 - 226895);
509+
date.sec = sec % 86400;
510+
date.hour = date.sec / 3600;
511+
date.sec = date.sec % 3600;
512+
date.min = date.sec / 60;
513+
date.sec = date.sec % 60;
514+
return date;
515+
}
516+
517+
public static DateModel UnixToJalali(int sec) {
518+
return UnixToJalali(sec, 0);
519+
}
520+
521+
public static DateModel UnixToGregorian(int sec, int timeZone) {
522+
sec += timeZone;
523+
DateModel date = DaysToGregorian((sec / 86400) + 719163);
524+
date.sec = sec % 86400;
525+
date.hour = date.sec / 3600;
526+
date.sec = date.sec % 3600;
527+
date.min = date.sec / 60;
528+
date.sec = date.sec % 60;
529+
return date;
530+
}
531+
532+
public static DateModel UnixToGregorian(int sec) {
533+
return UnixToGregorian(sec, 0);
534+
}
535+
536+
//todo to unix methods
489537
}

uneversaldatetools/src/main/java/com/ali/uneversaldatetools/date/DateSystem.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.ali.uneversaldatetools.date;
22

33
import android.os.Build;
4-
import android.support.annotation.NonNull;
54
import android.support.annotation.Nullable;
65
import android.support.annotation.RequiresApi;
76
import android.util.Log;
@@ -17,7 +16,7 @@
1716
*/
1817

1918
//this is struct
20-
public class DateSystem implements IDate, Comparable<IDate> {
19+
public class DateSystem implements IDate {
2120

2221
private Calendar Calendar;
2322
private DateModel Date;
@@ -26,7 +25,7 @@ public class DateSystem implements IDate, Comparable<IDate> {
2625
public DateSystem(DateModel date, Calendar calendar) {
2726
Calendar = calendar;
2827

29-
if (date.getMonth() == 0) throw new IllegalArgumentException("month cant be 0");
28+
if (date.month == 0) throw new IllegalArgumentException("month cant be 0");
3029
switch (Calendar) {
3130
case Jalali: {
3231
Date_SD = new JalaliDateTime(date);
@@ -111,6 +110,21 @@ public int getDay() {
111110
return Date_SD.getDay();
112111
}
113112

113+
@Override
114+
public int getHour() {
115+
return Date_SD.getHour();
116+
}
117+
118+
@Override
119+
public int getMin() {
120+
return Date_SD.getMin();
121+
}
122+
123+
@Override
124+
public int getSec() {
125+
return Date_SD.getSec();
126+
}
127+
114128
public int getDays() {
115129
return Date_SD.getDays();
116130
}
@@ -237,14 +251,14 @@ public String toString() {
237251
return Date_SD.toString();
238252
}
239253

240-
@Override
241-
public int compareTo(@NonNull IDate o) {
242-
return CompareTo(o);
243-
}
244-
245-
public int CompareTo(IDate t2) {
246-
return Date.compareTo(t2);
247-
}
254+
// @Override
255+
// public int compareTo(@NonNull IDate o) {
256+
// return CompareTo(o);
257+
// }
258+
//
259+
// public int CompareTo(IDate t2) {
260+
// return Date.compareTo(t2);
261+
// }
248262

249263
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
250264
public boolean equals(DateSystem other) {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.ali.uneversaldatetools.date;
2+
3+
/**
4+
* Created by ali on 9/30/18.
5+
*/
6+
7+
public class DefaultCalendar {
8+
9+
private Calendar defaultCalendar;
10+
11+
public Calendar getDefaultCalendar() {
12+
return defaultCalendar;
13+
}
14+
15+
public void setDefaultCalendar(Calendar defaultCalendar) {
16+
this.defaultCalendar = defaultCalendar;
17+
}
18+
}

uneversaldatetools/src/main/java/com/ali/uneversaldatetools/date/GregorianDateTime.java

Lines changed: 90 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@ public class GregorianDateTime implements IDate, Comparable<GregorianDateTime> {
1414
private int Year;
1515
private int Month;
1616
private int Day;
17+
private int Hour;
18+
private int Min;
19+
private int Sec;
1720

18-
public static final int[] DaysInMonth = {
21+
private static final int[] DaysInMonth = {
1922
0,
2023
31,
2124
29,
@@ -31,23 +34,51 @@ public class GregorianDateTime implements IDate, Comparable<GregorianDateTime> {
3134
31
3235
};
3336

34-
public GregorianDateTime(DateModel dateTime) {
35-
Year = dateTime.getYear();
36-
Month = dateTime.getMonth();
37-
Day = dateTime.getDay();
37+
public static GregorianDateTime FromUnixTime(int unixTime) {
38+
DateModel dateModel = DateConverter.UnixToGregorian(unixTime);
39+
Validate(dateModel);
40+
return new GregorianDateTime(dateModel);
41+
}
42+
43+
public GregorianDateTime(DateModel date) {
44+
45+
Validate(date);
46+
47+
Year = date.year;
48+
Month = date.month;
49+
Day = date.day;
50+
Hour = date.hour;
51+
Min = date.min;
52+
Sec = date.sec;
3853
}
3954

4055
public GregorianDateTime(int year, int month, int day) {
56+
57+
Validate(new DateModel(year, month, day));
58+
4159
Year = year;
4260
Month = month;
4361
Day = day;
4462
}
4563

64+
public GregorianDateTime(int year, int month, int day, int hour, int min, int sec) {
65+
66+
Validate(new DateModel(year, month, day, hour, min, sec));
67+
68+
Year = year;
69+
Month = month;
70+
Day = day;
71+
Hour = hour;
72+
Min = min;
73+
Sec = sec;
74+
}
75+
4676
public GregorianDateTime(int days) {
4777
DateModel sd = DateConverter.DaysToGregorian(days);
48-
Year = sd.getYear();
49-
Month = sd.getMonth();
50-
Day = sd.getDay();
78+
Validate(sd);
79+
Year = sd.year;
80+
Month = sd.month;
81+
Day = sd.day;
5182
}
5283

5384
public static GregorianDateTime Parse(String s) {
@@ -189,6 +220,21 @@ public int getDay() {
189220
return Day;
190221
}
191222

223+
@Override
224+
public int getHour() {
225+
return Hour;
226+
}
227+
228+
@Override
229+
public int getMin() {
230+
return Min;
231+
}
232+
233+
@Override
234+
public int getSec() {
235+
return Sec;
236+
}
237+
192238
public int getDays() {
193239
return DateConverter.GregorianToDays(Year, Month, Day);
194240
}
@@ -209,6 +255,10 @@ public String toString() {
209255
return String.format("%04d/%02d/%02d", Year, Month, Day);
210256
}
211257

258+
public String toLongString() {
259+
return String.format("%04d/%02d/%02d/%02d/%02d/%02d", Year, Month, Day, Hour, Min, Sec);
260+
}
261+
212262
@Override
213263
public int compareTo(@NonNull GregorianDateTime o) {
214264
return CompareTo(o);
@@ -241,4 +291,36 @@ public int hashCode() {
241291
hashCode = (hashCode * 397) ^ Day;
242292
return hashCode;
243293
}
294+
295+
private static void Validate(DateModel dateModel) {
296+
//year
297+
if (dateModel.year < 0)
298+
throw new IllegalArgumentException("invalid date");
299+
300+
//month
301+
if (dateModel.month < 1 | dateModel.month > 12)
302+
throw new IllegalArgumentException("invalid date");
303+
304+
//day
305+
if (DateConverter.IsGregorianLeap(dateModel.year) & dateModel.month == 2) {
306+
if (dateModel.day < 1 | dateModel.day > DaysInMonth[dateModel.month] + 1)
307+
throw new IllegalArgumentException("invalid date");
308+
} else {
309+
if (dateModel.day < 1 | dateModel.day > DaysInMonth[dateModel.month])
310+
throw new IllegalArgumentException("invalid date");
311+
}
312+
313+
//hour
314+
if (dateModel.month < 0 | dateModel.month > 23)
315+
throw new IllegalArgumentException("invalid date");
316+
317+
//min
318+
if (dateModel.month < 0 | dateModel.month > 60)
319+
throw new IllegalArgumentException("invalid date");
320+
321+
//sec
322+
if (dateModel.month < 0 | dateModel.month > 60)
323+
throw new IllegalArgumentException("invalid date");
324+
325+
}
244326
}

0 commit comments

Comments
 (0)