1

SOで同様のQueをいくつか見つけましたが、解決策は見つかりませんでした。

今日Dateは次のようになります:(これをDate1と言い、値は2012-06-22

    Calendar cal = Calendar.getInstance();
    SimpleDateFormat dateformatter = new SimpleDateFormat("yyyy-MM-dd");
    Date start = cal.getTime();
    String currentDate=dateformatter.format(start);

ユーザーから4つの値を取得しています。

  • 特定の日付(想定5
  • 特定の月(想定1
  • 特定の年(想定2012
  • 日数(想定7

したがって、この日付は、Date22012-01-05yyyy-MM-dd)になり、日数がに設定されているとし7ます。


日付1日付2-いいえを比較したい。日の

次のスニペットを使用することで、特にいいえ。カレンダーインスタンスから日数を差し引くことができます。

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -7);

しかし、私はDate2をの形式で使用Stringしているため、このアプローチに従うことはできません。

助けていただければ幸いです。

編集:

あなたの提案から、私はの方法を使用してに変換Stringすることができます。DateparseSimpleDateFormat

今、私は2つDateのオブジェクトを持っています。

  • 、、、およびの点でそれらの違いを見つけるにはどうすればよいですか?daysmonthsyears
  • 特定の番号を減算する方法。7特定の日付からの日数、たとえば2012-01-05
4

4 に答える 4

2

(日付を表す)をSimpleDateFormatに変換するために使用しますStringDate

例えば ​​:

Date parsedDate  = new SimpleDateFormat("yyyy-MM-dd").parse("2012-01-05");
于 2012-06-22T08:42:16.957 に答える
2

/の代わりにJodaTimeを使用できる可能性がある場合は、使用してください。それはあなたの人生を楽にするでしょう。DateCalendar

そうでない場合は、現在の日付をフォーマットしたくないようです。代わりに、ユーザーから解析する必要があります。 Date2

Date date2 = dateFormatter.parse(text);

次に、カレンダーを作成して特定の日数を差し引くか、(経過時間について話している場合は、ここでDST遷移とタイムゾーンに関する動作を考慮する必要があります)7 * 24*60を差し引くことができます * 60*から1000ミリ秒date2.getTime()

基本的に、できるだけ早く文字列形式から変換し、本当に必要な場合にのみ文字列形式に変換する必要があります。確かに比較のためではありませんこのデータの自然な表現はDateor Calendar(JDKを使用していると仮定)であるため、データをその表現に取り込むように努めます。

ただし、考えるべき本物の「ビジネス」の質問がいくつかあります。

  • 現在の日付をユーザーが指定した日付と比較しますか、それとも現在の日付と時刻をユーザーが指定した日付と比較しますか?
  • ユーザーの入力にどのタイムゾーンを使用しますか?
  • 経過日数または「論理」日数について考えていますか?DSTの移行により、午前1時30分より7 * 24時間早い場合は、午前2時30分になる場合があり、その逆の場合もあります。

使用する表現に影響するため、コードを実装する前に、これらすべての質問に答える必要があります。また、実装を開始する前に、考えられるすべての単体テストを作成します。

于 2012-06-22T08:43:51.597 に答える
2

私の理解では、現在2つの日付があり、日付から特定の日数を減算したいと考えています。

SimpleDateFormatまず、日付を文字列に、文字列を日付に変換するために使用できます

ここで、日を引くには7と言います。日付の時刻を取得し、そこから7 * 24 * 60 * 60*1000を引くことができます。

     long daybeforeLong = 7 * 24 * 60 * 60 * 1000;
try {

Date todayDate = new Date();

long nowLong = todayDate.getTime();

Date beforeDate = new Date((nowLong - daybeforeLong));

    } 

catch (ParseException e) {
// TODO Auto-generated catch block
                                                e.printStackTrace();
}
于 2012-06-22T13:08:54.377 に答える
1

javaが提供するComparatorを利用して、日付の比較と並べ替えもできると思います。ここにリンクがあります

あなたが探していたものを手に入れることを願っています。

于 2012-06-22T08:44:07.460 に答える