2012-01-07 8 views
0

CalendarオブジェクトのTime値がjava.sql.Timeオブジェクトの値と等しいかどうかを知りたい。Calendarの時刻をjava.sql.Timeオブジェクトと比較するにはどうすればいいですか?

例えば

Calendar c; //c.getTime().toString() == "Sat Jan 07 09:00:00 GMT 2012" 
Time t;  //d.toString() == "09:00:00"; 

私は

t.equals(c.getTime()) 

を試みたが、カレンダーは、日付情報を持っているので、式はfalseです。

2つを比較する最良の方法は何ですか?

編集:
Timeオブジェクトは、Hibernateかかわら取得していない日付情報が付属しています。

Calendarオブジェクトを使用すると、使用方法が完全に罰金です

Calendar c= Calendar.getInstance(); 
c.set(Calendar.HOUR_OF_DAY, 9); 
c.set(Calendar.MINUTE, 0); 
c.set(Calendar.SECOND, 0); 
+1

どのように() –

+1

@DhanushGopinathは、私はあなたが '日付を省略しているいくつかのたDateFormatterを、適用疑い、Date''から成り、OP – alf

+0

日付のデフォルトの実装を助けにはなりません'コンポーネント – Narayan

答えて

2

によって作成されます。しかし、目標は不明です。 cdと同じにする理由は何ですか?

さらに、d.toString() == "09:00:00" - Dateには常に日付が含まれています。

何より重要な、しかし、あなたがある - つまり10:00 BSTから09:00 UTCを伝えることはできませんのでDateがない限り、(まあ、それは持っていたが、あなたはDateのこの部分に触れ落胆している)は、タイムゾーン情報を持っていないということですタイムゾーンを指定します。あなたはCalendar cからタイムゾーンを取得することができ、そしてそれは一種のあなたが何をする必要があるかについて説明します。 カレンダーから

  • コピーのタイムゾーンはすでにCalendarフィールドを比較
  • 使用

    1. はあなたの日からCalendarを作成していますあなたのために興味があります。私はそれが時、分、秒、おそらくミリ秒であると思います。

    更新:今あなたはそれが実際にjava.sql.Timeだ言及したことを、私は心配です。問題はミリ秒単位として通常時間、分、秒、などを含む構造としてストア時間は、暗示タイムゾーン(SQL Serverのタイムゾーン)

  • java.sql.Time店の時間があります、

    • SQLサーバです1970年1月1日の "ゼロエポック"値です。通常、日付部分は1970年1月1日に削除されますが、このクラスにはタイムゾーン情報が含まれていません。 (まあ、再び、それは一種のんが、廃止予定です。)
    • Calendarがサーバgets converted into milliseconds using system default timezoneからの時間が、あなたは、この値を読むこと、それが実際に何を意味

    が明示的に設定のタイムゾーンを持っています独自のタイムゾーンでCalendarと比較してください。

    混乱して壊れやすいように聞こえる場合は、それが原因です。だから、基本的に次の3つのタイムゾーンいる:任意の比較は任意の理にかなっているように、

    1. SQL ServerのTZ
    2. JVMのデフォルトTZ
    3. カレンダーのTZ

    すべての3つは同じでなければなりません。

  • +0

    私の更新を見てください。日付はHibernateを介して取得され、オブジェクト内の何も変更されず、それがtoString()が生成するものです。 –

    +0

    私は何らかの理由でDateとして読むと思っていましたが、実際には 'sql.Time'オブジェクトです。私は再び質問を更新します。 –

    +0

    さて、私はそれを行ってあげるよ。ありがとう。 –

    1

    あなたはJavaで日時に対処するDateCalendarGregorianCalendar,SimpleDateFormat`などのクラスを使用することができます。いくつかの例を見てみましょう。

    SimpleDateFormat dayFormat = new SimpleDateFormat("D"); 
    int _currentDay = Integer.parseInt(dayFormat.format(new Date(System.currentTimeMillis()))); 
    
    SimpleDateFormat monthFormat = new SimpleDateFormat("M"); 
    int _currentMonth = Integer.parseInt(monthFormat.format(new Date(System.currentTimeMillis()))); 
    
    SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy"); 
    int _currentYear = Integer.parseInt(yearFormat.format(new Date(System.currentTimeMillis()))); 
    
    System.out.println(_currentDay+"/"+_currentMonth+"/"+_currentYear); 
    

    現在のミリ秒に基づいて現在の日付を表示します。


    String toDate = "07/1/2012"; 
    
    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); 
    Calendar currentDateCal = Calendar.getInstance(); 
    
    // Zero out the hour, minute, second, and millisecond. 
    currentDateCal.set(Calendar.HOUR_OF_DAY, 0); 
    currentDateCal.set(Calendar.MINUTE, 0); 
    currentDateCal.set(Calendar.SECOND, 0); 
    currentDateCal.set(Calendar.MILLISECOND, 0); 
    
    Date currentDate = currentDateCal.getTime(); 
    
    Date toDt; 
    
    try 
    { 
        toDt = df.parse(toDate); 
    } 
    catch (ParseException e) 
    { 
        toDt = null; 
        System.out.println(e.getMessage()); 
    } 
    
    if (currentDate.equals(toDt)) 
    { 
        System.out.println(currentDate); // Displays the current date. 
    
        //Rest of the stuff. 
    } 
    

    String toDate = "07/12/2012"; 
    try 
    { 
        if (new SimpleDateFormat("MM/dd/yyyy").parse(toDate).getTime()/(1000 * 60 * 60 * 24) >= System.currentTimeMillis()/(1000 * 60 * 60 * 24)) 
        { 
         System.out.println("True"); 
        } 
        else 
        { 
         System.out.println("Untrue"); 
        } 
    } 
    catch(ParseException ex) 
    { 
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    

    String toDateAsString = "07/12/2012"; 
    Date toDate=null; 
    
    try 
    { 
        toDate = new SimpleDateFormat("MM/dd/yyyy").parse(toDateAsString); 
    } 
    catch (ParseException ex) 
    { 
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    
    long toDateAsTimestamp = toDate.getTime(); 
    long currentTimestamp = System.currentTimeMillis(); 
    long getRidOfTime = 1000 * 60 * 60 * 24; 
    long toDateAsTimestampWithoutTime = toDateAsTimestamp/getRidOfTime; 
    long currentTimestampWithoutTime = currentTimestamp/getRidOfTime; 
    
    if (toDateAsTimestampWithoutTime >= currentTimestampWithoutTime) 
    { 
        System.out.println("True"); 
    } 
    else 
    { 
        System.out.println("False"); 
    } 
    

    JodaTimeの変種:

    String toDateAsString = "07/01/2012"; 
    DateTime toDate = DateTimeFormat.forPattern("MM/d/yyyy").parseDateTime(toDateAsString); 
    DateTime now = new DateTime(); 
    
    if (!toDate.toLocalDate().isBefore(now.toLocalDate())) 
    { 
        System.out.println("True"); 
    } 
    else 
    { 
        System.out.println("False"); 
    } 
    
    +0

    * 'Date'は既に廃止予定* - [not true](http://docs.oracle.com/javase/7/docs/api/java/sql/Date.html)、申し訳ありません。 – alf

    +0

    @alf:classは非推奨ではありませんが、ほとんどのメソッドはhttp://docs.oracle.com/javase/7/docs/api/java/util/Date.htmlです。 – naresh

    +0

    @nareshありがとう、私の悪い。しかし、私はこれらのメソッドには気をつけません: 'Date'は非難されない適切なクラスです。 – alf

    0

    ミリ秒単位で時間を比較してみませんか?

    Date d; 
    Calendar c; 
    System.out.println(d.getTime() == c.getTimeInMillis()); 
    
    +0

    OPは最初の行で言及しているように、OPは日付を無視したいので、 – alf

    0

    あなたは日時でこの質問をタグ付け、以来、私はあなたがすでに

    ... 
    //Initialize Calendar and Date Object 
    
    DateTime d1 = new DateTime(c.getTime()); 
    DateTime d2 = new DateTime(d.getTime()); 
    
    // Convert d1 and d2 to LocalDate say ld1 and ld2 since, Java Date defaults to GMT 
    
    ld1.compareTo(ld2); 
    

    ジョダを使用すると仮定?

    0

    私は今日このことをしなければなりませんでした。この記事の回答が私の問題を解決するのに役立ちました。私はすべての私のタイムゾーンがOPのように同じであることを知っています。そして私は、同じ条件を持つ他の人の利益のために、私のレガシーコードでJoda時間を使用する自由を持っていません、ここで私はどのようにバニラJavaでそれをしました。

    方法論:

    • java.sql.Timejava.util.Dateから継承によるgetTime()を持っています。この方法を使用すると、 Javaエポック以降の時間部分を表す java.util.Dateオブジェクトを作成できます。
    • 比較のために、所望のjava.util.Calendar オブジェクトを変換して、Javaエポックから別の 時間を表すjava.util.Dateオブジェクトを生成する必要があります。
    • 日付部分が同等であるため、2つの オブジェクトを比較すると、目的の結果を生成する時間部分のみが比較されます。、、および.before()または.after().equals()を変更することにより、上記の方法を使用し

      Some Date: Thu Jan 01 17:00:00 EST 1970 
      Sql Time: Thu Jan 01 17:00:00 EST 1970 
      Are they equal? true 
      

      import java.sql.Time; 
      import java.text.SimpleDateFormat; 
      import java.util.Calendar; 
      import java.util.Date; 
      
      public class Test { 
      
          /** 
          * Method to convert a calendar object to java's epoch date 
          * keeping only the time information 
          */ 
          public static Date toEpochDate(Calendar calendar) { 
           return new Date(Time.valueOf(new SimpleDateFormat("HH:mm:ss").format(calendar.getTime())).getTime()); 
          } 
      
          public static void main(String[] args) { 
      
           // create any calendar object 
           Calendar someTime = Calendar.getInstance(); 
           someTime.set(Calendar.HOUR_OF_DAY, 17); 
           someTime.set(Calendar.MINUTE, 0); 
           someTime.set(Calendar.SECOND, 0); 
      
           // convert it to java epoch date 
           Date someDate = toEpochDate(someTime); 
      
           // create a date object from java.sql.Time 
           Date fromSqlTime = new Date(Time.valueOf("17:00:00").getTime()); 
      
           // now do the comparison 
           System.out.println("Some Date: " + someDate.toString()); 
           System.out.println("Sql Time: " + fromSqlTime.toString()); 
           System.out.println("Are they equal? " + someDate.equals(fromSqlTime)); 
          } 
      } 
      

      上記次の出力を生成する:さらに別れなし

    は、ここにコードされ様々な時間比較の便利な方法を作成することができる。 calendar.getTimeInMilliSecondsでdate.getTimeを()の比較について

    関連する問題