2016-06-23 10 views
0

私は時間間隔を計算するプログラムを持っています。 PMでtimeToの時刻を入力するとAMに変わります(デバッグしたとき)。ここ コードがある:PM AMへの変更

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 


    Scanner sc = new Scanner(System.in); 

    System.out.print("Enter date: "); //ex: input 2016-02-16 
    String dateFrom = sc.nextLine(); 

    System.out.print("Enter time from: "); //ex input: 09:00 AM 
    String timeFrom = sc.nextLine(); 

    System.out.print("Enter time to: "); //ex input: 05:00 PM 
    String timeTo = sc.nextLine(); 

    String substring = timeTo.substring(Math.max(timeTo.length() - 2, 0)); 
    String substring1 = timeFrom.substring(Math.max(timeFrom.length() - 2, 0)); 

    Calendar c = Calendar.getInstance(); 
    try { 
     c.setTime(dateformat.parse(dateFrom)); 
    } catch (Exception e) { 
    } 
    if ("AM".equals(substring) && "AM".equals(substring1)) { 
     c.add(Calendar.DATE, 1); 
    } else if ("AM".equals(substring)) { 
     c.add(Calendar.DATE, 1); 
    } 

    Date date1 = c.getTime(); 

    dateTo = dateformat.format(date1); 

    Date d1 = new Date(); 
    Date d2 = new Date(); 

    try { 
     d1 = format.parse(dateFrom + " " + timeFrom); 
     d2 = format.parse(dateTo + " " + timeTo); // instead of 2016-02-16 05:00:00 PM 
     // it becomes 2016-02-16 05:00:00 AM 
    } catch (Exception e) { 
    } 

    long diffMin = (d2.getTime() - d1.getTime())/(60 * 1000) % 60; 
    long diffHour = (d2.getTime() - d1.getTime())/(60 * 60 * 1000) % 24; 

    double d = (double) diffMin; 
    double d3 = (double) diffHour; // -4.0 because 05:00 AM - 09:00 AM 

ちょうど上記のサンプルのように、timeFromための入力値09:00 AMとtimeToため5:00 PMであるD2に渡されたときには、5:00 AMになります。

答えて

1

誤った日付形式文字列を使用しています。 HHは24時間形式の「時間帯」、つまり0〜23、AM/PMについては何もありません(したがって、何でも<はAMになります)。

12時間形式の場合はhhを使用する必要があります(0〜11の使用の場合は1〜12時間が必要です)kk。また、AM/PMマーカーを明示的に追加する必要があります。だから、

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm a"); 

で終わる必要がありますjava.text.SimpleDateFormat用APIドキュメンテーションを見て、それがフォーマット文字列内のすべての可能な要素について説明します。

関連する問題