PDA

View Full Version : کلاس تاریخ



lilashad
سه شنبه 16 خرداد 1391, 08:49 صبح
من می خوام یه کلاس تاریخ که بتونه تاریخ میلادی را به شمسی تبدیل کنه بنویسم کسی می تونه راهنماییم کنه
سپاس

mortezaadi
سه شنبه 16 خرداد 1391, 12:03 عصر
http://code.google.com/p/persian-calendar/
و
http://sourceforge.net/projects/persian/

spiderman200700
سه شنبه 16 خرداد 1391, 13:49 عصر
سلام.
فکر ميکنم اين جواب کارتونو ميده. خدمت شما:

/*
* spiderman200700
*/
import java.util.Date;
public class ShDate {

private int Day = 0;
private int Date = 0;
private int Month = 0;
private int Year = 0;
private int Seconds = 0;
private int Minutes = 0;
private int Hours = 0;
private String DayName = null;
private String MonthName = null;

public ShDate() {
this(new Date());
}

public ShDate(String date) {
this(parsDate(date));
}

public ShDate(Date date) {
CreateShDate(date);
}

private static Date parsDate(String s) {
System.out.println(s);
int d[] = new int[3];
d[0] = Integer.valueOf(s.substring(0, s.indexOf('/')));;
d[1] = Integer.valueOf(s.substring(s.indexOf('/') + 1, s.lastIndexOf('/')));
d[2] = Integer.valueOf(s.substring(s.lastIndexOf('/') + 1));
return new Date(d[0] + "/" + d[1] + "/" + d[2]);
}

private void CreateShDate(Date date) {
int MRuzhayeMah[] = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int JRuzhayeMah[] = new int[]{31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};

int TempYear = date.getYear() + 300;
int TempMonth = date.getMonth();
int TempDay = date.getDate();

int MiladiDayNumber =
365 * TempYear + doubleToInt((TempYear + 3) / 4) - doubleToInt((TempYear + 99) / 100)
+ doubleToInt((TempYear + 399) / 400);
int i;

for (i = 0; i < TempMonth; i++) {
MiladiDayNumber += MRuzhayeMah[i];
}

if (TempMonth > 1 && ((TempYear % 4 == 0 && TempYear % 100 != 0) || (TempYear % 400 == 0))) {
MiladiDayNumber++;
}

MiladiDayNumber += TempDay;

int JalaliDayNumber = MiladiDayNumber - 79;

int j_np = doubleToInt(JalaliDayNumber / 12053);

JalaliDayNumber = JalaliDayNumber % 12053;

int JalaliYear = 979 + 33 * j_np + 4 * doubleToInt(JalaliDayNumber / 1461);

JalaliDayNumber %= 1461;

if (JalaliDayNumber >= 366) {
JalaliYear += doubleToInt((JalaliDayNumber - 1) / 365);
JalaliDayNumber = (JalaliDayNumber - 1) % 365;
}

for (i = 0; i < 11 && JalaliDayNumber >= JRuzhayeMah[i]; i++) {
JalaliDayNumber -= JRuzhayeMah[i];
}
int JalaliMonth = i + 1;

CreateDayName(date.getDay());
CreateMonthName(JalaliMonth);


Date = JalaliDayNumber==0?31:JalaliDayNumber;
Month = JalaliMonth;
Year = JalaliYear;
Seconds = date.getSeconds();
Minutes = date.getMinutes();
Hours = date.getHours();
}

public void CreateDayName(int GarDay) {
switch (GarDay) {
case 0:
DayName = "يکشنبه";
Day = 2;
break;
case 1:
DayName = "دوشنبه";
Day = 3;
break;
case 2:
DayName = "سه شنبه";
Day = 4;
break;
case 3:
DayName = "چهارشنبه";
Day = 5;
break;
case 4:
DayName = "پنجشنبه";
Day = 6;
break;
case 5:
DayName = "جمعه";
Day = 7;
break;
case 6:
DayName = "شنبه";
Day = 1;
break;
}
}

public void CreateMonthName(int GarMonth) {

switch (GarMonth) {
case 1:
MonthName = "فروردين";
break;
case 2:
MonthName = "ارديبهشت";
break;
case 3:
MonthName = "خرداد";
break;
case 4:
MonthName = "تير";
break;
case 5:
MonthName = "مرداد";
break;
case 6:
MonthName = "شهريور";
break;
case 7:
MonthName = "مهر";
break;
case 8:
MonthName = "آبان";
break;
case 9:
MonthName = "آذر";
break;
case 10:
MonthName = "دي";
break;
case 11:
MonthName = "بهمن";
break;
case 12:
MonthName = "اسفند";
break;
}
}

public int getDayOfWeek() {
return Day;
}

public int getDateOfMonth() {
return Date;
}

public int getMonth() {
return Month;
}

public int getYear() {
return Year;
}

public String getDayName() {
return DayName;
}

public String getMonthName() {
return MonthName;
}

public int getSeconds() {
return Seconds;
}

public int getMinutes() {
return Minutes;
}

public int getHours() {
return Hours;
}

public String getTarikhToString() {
return "امروز " + DayName + " " + Date + " " + MonthName + " " + Year;
}

public String TimeToString() {
return getHours() + ":" + getMinutes() + ":" + getSeconds();
}

public String getTarikh() {
return Year + "/" + Month + "/" + Date;
}

@Override
public String toString() {
return getTarikhToString() + " ساعت " + TimeToString();
}

private int doubleToInt(double f) {
return new Double(f).intValue();
}
}


موفق باشيد

mehdi_m1360
دوشنبه 29 خرداد 1391, 10:56 صبح
سلام
میتونی از ICU4j هم استفاده کنی. البته لینک های mortezaadi (http://barnamenevis.org/member.php?108008-mortezaadi) هم خوب هستن