私は次のように2つの文字列日時を持っています:
String Date1 = "05-09-2013 10:46:10"
String Date2 = "06-09-2013 10:46:10"
これらの日時を比較する必要があり、結果が必要です。
try{
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String str1 = "12/10/2013";
Date date1 = formatter.parse(str1);
String str2 = "13/10/2013";
Date date2 = formatter.parse(str2);
if (date1.compareTo(date2)<0)
{
System.out.println("date2 is Greater than my date1");
}
}catch (ParseException e1){
e1.printStackTrace();
}
以下を使用できます。
public static boolean CheckDates(String startDate, String endDate) {
SimpleDateFormat dfDate = new SimpleDateFormat("dd-MMM-yyyy");
boolean b = false;
try {
if (dfDate.parse(startDate).before(dfDate.parse(endDate))) {
b = true; // If start date is before end date.
} else if (dfDate.parse(startDate).equals(dfDate.parse(endDate))) {
b = true; // If two dates are equal.
} else {
b = false; // If start date is after the end date.
}
} catch (ParseException e) {
e.printStackTrace();
}
return b;
}
String pattern = "dd-MM-yyyy HH:mm:ss";
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
Date one = dateFormat.parse(Date1String);
Date two = dateFormat.parse(Date2String);
これで、2つのDate
オブジェクトができました。それらを比較できます。
次のように、文字列を日付に変換できます。
String str = "12/12/1912";
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(str);
そして文字列に戻る
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
System.out.println("Date is : " + formatter.format(date));
また、Dateにはbeforeメソッドとafterメソッドがあり、互いに比較できます。
ちなみに、Jodaというライブラリもありますので、チェックアウトすることもできます。
最良の結果を得るには、 Joda time を試してください。使い方はとても簡単です。
public static String CompareDates(String date1, String date2) {
try{
String pattern = "dd-MMM-yyyy HH:mm:ss";
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
Date Date1 = formatter.parse(date1);
Date Date2 = formatter.parse(date2);
if (Date1 != null && Date2 != null) {
if (Date1 .equals(Date2 ))
{
//Both dates are equal.
}
else{
//both date are not equal("use after and before to check occurrence of dates")
}
}catch (Exception e1){
e1.printStackTrace();
}
}
これを試して、
String pattern = "<yourPattern>";
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
try {
Date one = dateFormat.parse(<yourDate>);
Date two = dateFormat.parse(<yourDate>);
}
catch (ParseException e) {}
このスニペットは、文字列形式の2つの日付を比較する場合、つまり日付よりも大きい場合は日付を許可しないことを説明しています。
private void setTodate() {
// TODO Auto-generated method stub
// Process to get Current Date
int fYear, fMonth, fDay;
final Calendar c = Calendar.getInstance();
fYear = c.get(Calendar.YEAR);
fMonth = c.get(Calendar.MONTH);
fDay = c.get(Calendar.DAY_OF_MONTH);
// Launch Date Picker Dialog
DatePickerDialog dpd = new DatePickerDialog(RemindMeDetails.this,
new DatePickerDialog.OnDateSetListener() {
@SuppressLint("SimpleDateFormat")
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
try{
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
String fdate=recr_edit_Fromdate.getText().toString();
Date dateFD = formatter.parse(fdate);
String tdate=(dayOfMonth + "-"
+ (monthOfYear + 1) + "-" + year).toString();
Date dateTD = formatter.parse(tdate);
if (dateFD.compareTo(dateTD)<=0)
{
/* System.out.println("tdate is Greater than my fdate");
recr_edit_Todate.setText(dayOfMonth + "-"
+ (monthOfYear + 1) + "-" + year);*/
recr_edit_Todate.setText(tdate);
}
else{
showmessage("Alert", "Start date is not greater than End date");
}catch (ParseException e1){
e1.printStackTrace();
}
}
}, fYear, fMonth, fDay);
dpd.show();
}// method closed
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2010-02-22");
Date date2 = sdf.parse("2010-03-23");
int i = date1.compareTo(date2);
switch (i){
case -1: //date1<date2 = -1
return sDate2;
case 1: //date1>date2 = 1
return sDate1;
case 0: //date1==date2= 0
default:
return sDate2;
}
} catch (ParseException e) {
return sDate1;
}