文字列形式の日付を現在の日付と比較しようとしています。これは私がそれをやった方法です(テストはしていませんが動作するはずです)が、廃止されたメソッドを使用しています。代替案の良い提案はありますか?ありがとう。
追伸JavaでDateをやるのは本当に嫌いです。同じことを行うには非常に多くの方法があるので、どれが正しいものか本当にわからないので、ここで質問します。
String valid_until = "1/1/1990";
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
int year = strDate.getYear(); // this is deprecated
int month = strDate.getMonth() // this is deprecated
int day = strDate.getDay(); // this is deprecated
Calendar validDate = Calendar.getInstance();
validDate.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
if (currentDate.after(validDate)) {
catalog_outdated = 1;
}
あなたのコードは
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(valid_until);
if (new Date().after(strDate)) {
catalog_outdated = 1;
}
または
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(valid_until);
if (System.currentTimeMillis() > strDate.getTime()) {
catalog_outdated = 1;
}
使用できますcompareTo() (
CompareToメソッドは、現在のオブジェクトが他のオブジェクトよりも小さい場合は負の数、現在のオブジェクトが他のオブジェクトよりも大きい場合は正の数、両方のオブジェクトが等しい場合はゼロを返す必要があります。
// Get Current Date Time
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm aa");
String getCurrentDateTime = sdf.format(c.getTime());
String getMyTime="05/19/2016 09:45 PM ";
Log.d("getCurrentDateTime",getCurrentDateTime);
// getCurrentDateTime: 05/23/2016 18:49 PM
if (getCurrentDateTime.compareTo(getMyTime) < 0)
{
}
else
{
Log.d("Return","getMyTime older than getCurrentDateTime ");
}
コードが機能する前の正しい形式は( "dd/MM/yyyy")であることに注意してください。 「mm」は分を意味します!
String valid_until = "01/07/2013";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = null;
try {
strDate = sdf.parse(valid_until);
} catch (ParseException e) {
e.printStackTrace();
}
if (new Date().after(strDate)) {
catalog_outdated = 1;
}
Calendar
からDate
を直接作成できます。
Calendar validDate = new GregorianCalendar();
validDate.setTime(strDate);
if (Calendar.getInstance().after(validDate)) {
catalog_outdated = 1;
}
Calendar toDayCalendar = Calendar.getInstance();
Date date1 = toDayCalendar.getTime();
Calendar tomorrowCalendar = Calendar.getInstance();
tomorrowCalendar.add(Calendar.DAY_OF_MONTH,1);
Date date2 = tomorrowCalendar.getTime();
// date1 is a present date and date2 is tomorrow date
if ( date1.compareTo(date2) < 0 ) {
// 0 comes when two date are same,
// 1 comes when date1 is higher then date2
// -1 comes when date1 is lower then date2
}
String date = "03/26/2012 11:00:00";
String dateafter = "03/26/2012 11:59:00";
SimpleDateFormat dateFormat = new SimpleDateFormat(
"MM/dd/yyyy hh:mm:ss");
Date convertedDate = new Date();
Date convertedDate2 = new Date();
try {
convertedDate = dateFormat.parse(date);
convertedDate2 = dateFormat.parse(dateafter);
if (convertedDate2.after(convertedDate)) {
txtView.setText("true");
} else {
txtView.setText("false");
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
trueを返します。また、date.beforeとdate.equalを使用して、beforeとequalを確認することもできます。
try {
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String str1 = "9/10/2015";
Date date1 = formatter.parse(str1);
String str2 = "10/10/2015";
Date date2 = formatter.parse(str2);
if (date1.compareTo(date2) < 0) {
System.out.println("date2 is Greater than my date1");
}
} catch (ParseException e1) {
e1.printStackTrace();
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.getDefault());
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
Date date1 = dateFormat.parse("2013-01-01");
Date date2 = dateFormat.parse("2013-01-02");
calendar1.setTime(date1);
calendar2.setTime(date2);
System.out.println("Compare Result : " + calendar2.compareTo(calendar1));
System.out.println("Compare Result : " + calendar1.compareTo(calendar2));
このカレンダーが表す時刻を、指定されたカレンダーが表す時刻と比較します。
2つのカレンダーの時間が等しい場合は0、このカレンダーの時間が他のカレンダーより前の場合は-1、このカレンダーの時間が他のカレンダーの後の場合は1を返します。
更新:Joda-Timeライブラリはメンテナンスモードになっているため、Java.time成功するフレームワーク。 Ole V.V.による回答 を参照してください。
Java.util.Dateおよび.Calendarクラスは厄介なことで有名です。それらを避けてください。 Joda-Time またはJava 8.の新しいJava.timeパッケージを使用します。
時刻なしの日付のみが必要な場合は、LocalDateクラスを使用します。
現在の日付の取得は、タイムゾーンによって異なります。パリでモントリオールの前に新しい日付がロールオーバーします。 JVMのデフォルトに依存するのではなく、目的のタイムゾーンを指定します。
Joda-Time 2.3の例。
DateTimeFormat formatter = DateTimeFormat.forPattern( "d/M/yyyy" );
LocalDate localDate = formatter.parseLocalDate( "1/1/1990" );
boolean outdated = LocalDate.now( DateTimeZone.UTC ).isAfter( localDate );
時には、次のような日付のリストを作成する必要があります
今日は時間
昨日と昨日
2017年6月23日のその他の日
これを行うには、現在の時刻とデータを比較する必要があります。
Public class DateUtil {
Public static int getDateDayOfMonth (Date date) {
Calendar calendar = Calendar.getInstance ();
Calendar.setTime (date);
Return calendar.get (Calendar.DAY_OF_MONTH);
}
Public static int getCurrentDayOfMonth () {
Calendar calendar = Calendar.getInstance ();
Return calendar.get (Calendar.DAY_OF_MONTH);
}
Public static String convertMillisSecondsToHourString (long millisSecond) {
Date date = new Date (millisSecond);
Format formatter = new SimpleDateFormat ("HH: mm");
Return formatter.format (date);
}
Public static String convertMillisSecondsToDateString (long millisSecond) {
Date date = new Date (millisSecond);
Format formatter = new SimpleDateFormat ("dd / MM / yyyy");
Return formatter.format (date);
}
Public static long convertToMillisSecond (Date date) {
Return date.getTime ();
}
Public static String compare (String stringData, String yesterday) {
String result = "";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy-MM-dd HH: mm: ss");
Date date = null;
Try {
Date = simpleDateFormat.parse (stringData);
} Catch (ParseException e) {
E.printStackTrace ();
}
Long millisSecond = convertToMillisSecond (date);
Long currencyMillisSecond = System.currentTimeMillis ();
If (currencyMillisSecond> millisSecond) {
Long diff = currencyMillisSecond - millisSecond;
Long day = 86400000L;
If (diff <day && getCurrentDayOfMonth () == getDateDayOfMonth (date)) {
Result = convertMillisSecondsToHourString (millisSecond);
} Else if (diff <(day * 2) && getCurrentDayOfMonth () -1 == getDateDayOfMonth (date)) {
Result = yesterday;
} Else {
Result = convertMillisSecondsToDateString (millisSecond);
}
}
Return result;
}
}
日付をカレンダーに変換し、そこで計算を行います。 :)
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.geT(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH); //same as cal.get(Calendar.DATE)
または:
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
if (strDate.after(new Date()) {
catalog_outdated = 1;
}
これを試すことができます
Calendar today = Calendar.getInstance ();
today.add(Calendar.DAY_OF_YEAR, 0);
today.set(Calendar.HOUR_OF_DAY, hrs);
today.set(Calendar.MINUTE, mins );
today.set(Calendar.SECOND, 0);
today.getTime()
を使用して値を取得し、比較できます。
現代の答えの時間。
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
String validUntil = "1/1/1990";
LocalDate validDate = LocalDate.parse(validUntil, dateFormatter);
LocalDate currentDate = LocalDate.now(ZoneId.of("Pacific/Efate"));
if (currentDate.isAfter(validDate)) {
System.out.println("Catalog is outdated");
}
今このコードを実行すると、出力は次のようになりました。
カタログが古くなっています
すべてのタイムゾーンで同じ日付になることはないため、LocalDate.now
に明示的なタイムゾーンを指定します。カタログをすべてのタイムゾーンで同時に期限切れにする場合は、UTCを使用していることをユーザーに通知する限り、ZoneOffset.UTC
を指定できます。
最新のJava日時APIであるJava.timeを使用しています。使用したdate_timeクラス、Calendar
、SimpleDateFormat
、およびDate
は、すべて設計が不十分で、幸いなことに古くなっています。また、名前にもかかわらずDate
は日付ではなく、特定の時点を表します。これの1つの結果は次のとおりです。今日は2019年2月15日ですが、新しく作成されたDate
オブジェクトは既にafter(等しくない)15/02/2019
の解析からDate
オブジェクトです。これは混乱を招きます。これとは逆に、現代のLocalDate
は時刻(およびタイムゾーン)のない日付なので、今日の日付を表す2つのLocalDate
は常に等しくなります。
はい、Java.timeは古いものと新しいAndroidデバイスでうまく動作します。少なくともJava 6が必要です。
org.threeten.bp
から日時クラスをインポートしてください。Java.time
が最初に記述された場所。Java.time
からJava 6および7へのバックポート(ThreeTen for JSR-310)。次を使用できますvalidDate.setTime(strDate)http://docs.Oracle.com/javase/でjavadocをご覧ください1.5.0/docs/api/Java/util/Calendar.html