Javaプログラムで時差を計算する方法

このQ&Aのポイント
  • Javaプログラムで2つの時間の時差を計算して結果を出力する方法について教えてください。
  • 現在のプログラムでは正しく時差を計算できていません。
  • 修正して時差を正しく計算し、料金を出力するようにするにはどうすればいいでしょうか。
回答を見る
  • ベストアンサー

javaのプログラムの質問です

2つの時間を取得し、それらの時差を計算しそれに*300をし結果を出力するプログラムを作っています。 workspace.java package org.parking.java; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; class Parking { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date dateTo1 = null; Date dateTo2 = null; private long dayDiff; public Parking() { try{ dateTo1 = sdf.parse("2017/09/14 10:00:00"); dateTo2 = sdf.parse("2017/09/15 09:00:00"); System.out.println("パーキングシステムを作りました。"); } catch (ParseException e){ e.printStackTrace(); } } public void setParking(Date dateTo1,Date dateTo2)// { long dateTimeTo = dateTo1.getTime(); long dateTimeFrom = dateTo2.getTime(); this.dayDiff = (dateTimeFrom - dateTimeTo)/(1000*60*60); } public void show() { System.out.println("日数(FROM) : " + sdf.format(dateTo1)); System.out.println("日数(TO) : " + sdf.format(dateTo2)); System.out.println("差分時間: " + this.dayDiff); System.out.println("納車してから"+ this.dayDiff +"時間が経ちましたので料金は"+ (this.dayDiff*300) +"となります。"); } } Parkingsub.java package org.parking.java; class Sample1 { public static void main(String[] args) { Parking parking1 = new Parking(); parking1.show(); } }  これで一応実行はできるんですけど、実行結果が パーキングシステムを作りました。 日数(FROM) : 2017/09/14 10:00:00 日数(TO) : 2017/09/15 09:00:00 差分時間: 0 納車してから0時間が経ちましたので料金は0となります。  となってしまうんです。いろいろやってみたんですがなかなか上手く行かなくて・・・。どなたかご教授願えませんしょうか。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

void setParking(Date dateTo1,Date dateTo2)はいつ呼ばれるんでしょうか? あと long dateTimeTo = dateTo1.getTime(); long dateTimeFrom = dateTo2.getTime(); と System.out.println("日数(FROM) : " + sdf.format(dateTo1)); System.out.println("日数(TO) : " + sdf.format(dateTo2)); を見比べて何か気がつきませんか。

handhiro1122
質問者

お礼

あーーーなるほど!ありがとうございます!!

関連するQ&A

  • 以下のJAVAプログラムでご質問です。

    import java.util.*; import java.io.*; import java.text.*; public class JTest9 { public static void main(String[] args) throws IOException { System.out.println("基準となる年月日を入力して下さい。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); String str2 = br.readLine(); String str3 = br.readLine(); int year = Integer.parseInt(str1); int month = Integer.parseInt(str2); int day = Integer.parseInt(str3); String targetDateText = year + "/" + month + "/" + day; int addDate = 10; SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); Date targetDate = sdf.parse(targetDateText); Calendar cal = Calendar.getInstance(); cal.setTime(targetDate); cal.add(Calendar.DATE,addDate); System.out.println(sdf.format(cal.getTime())); } } 上記は、コンソールから、年、月、日 を入力し、その入力した日付から10日後の日付を 出力しようとしているプログラムです。 しかし、17行目のsdf.parse(targetDateText);において、コンソール上に下記エラーが出ます。 Exception in thread "main" java.lang.Error: Unresolved compilation problem: 処理されない例外の型 ParseException このエラーを解決したいのですが、どのように修正すればよいのでしょうか。 ご助言の程、よろしくお願い致します。

    • ベストアンサー
    • Java
  • importが分からない

    importが違うせいだと思いますが、コンパイルできるように直してください。 import java.util.Date; import java.text.SimpleDateFormat; import java.util.Locale; public class a {  public static void main (String args[]) {   Date d = calendar.getTime();   SimpleDateFormat f = new SimpleDateFormat("EEE", Locale.JAPANESE);   String s = f.format(d);   System.out.println(s);  } }

  • Date型

    下記のコード内で、「20060618」設定して、出力を「2006年6月18日」としたいのですが、やり方がわかりません。わかる人がいましたらよろしくお願いいたします。また、Date型というのはどのような型のことを言うのでしょうか?初心者的な質問だと思いますがよろしくお願いいたします。 import java.util.*; import java.text.*; class Test { public static void main(String[] args) { Date date1 = new Date(); // Date date1 = format.parse("20011010"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy'年'MM'月'dd'日'"); System.out.println(sdf1.format(date1)); } }

    • ベストアンサー
    • Java
  • 日付フォーマットの変換についての質問。

    こんにちは。宜しくお願いします。 現在、String型で受け取った日付の文字列をData型にして、さらに違う日付フォーマットにするプログラミングを書いています。 具体的には、 String型の"Wed, 07 Dec 2005 00:00:00 +0900"を、 Date型の"Wed, 07 Dec 2005 00:00:00 +0900"に変更して、 同じくDate型の、"2005-12-07T00:00:00+09:00"にしたいのです。 今躓いてる点は、String型の日付をDate型に変換する所で、エラーメッセージが、” Unparseable date: "Wed, 07 Dec 2005 00:00:00 +0900"”となっており、コード修正しても上手くいきません。 現時点でのコードを記述しますので、お時間があるときにご教授お願いします。 ---- import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 時間のフォーマット変換テスト。 * */ public class testConvertTime { public static void main(String[] args) throws ParseException { String strPreTime = "Wed, 07 Dec 2005 00:00:00 +0900"; //2005-12-07T03:00:12+09:00 SimpleDateFormat sdf = new SimpleDateFormat(); //日付の出力形式を設定 sdf.applyPattern( "EEE, dd MMM yyyy HH:mm:ss Z" ); //指定したフォーマットで日付が返される Date dat = sdf.parse(strPreTime); //java.util.Date dat = sdf.parse(strPreTime); } }

    • ベストアンサー
    • Java
  • ファイル名を動的に生成したい

    ファイル名を日付とその日の中の通し番号にしたいと思っています。 例えば2009/07/17日だったらファイル名を 20090717+その日の中の通し番号とする。 日付をファイル名にするところまではできたのですが「その日の中の 通し番号とする」部分がわかりませんので教えていただきたいのですが。 import java.text.SimpleDateFormat; import java.util.Date; public class CreateFileName { public static void main(String args[]){ Date date1 = new Date(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); //ファイル名は日付とその日の中の通し番号 String fileName = sdf1.format(date1).toString()+".pdf"; System.out.println(fileName); } }

  • javaのエラーについて質問

    毎度、お世話になります。 下記のコードに於いて、コメント箇所でエラー(UnsupportedOperationException())が発生します。 Q1)このエラーの原因と、改良をご教授ください。 ============================= import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.IntBuffer; import java.util.Date; import java.util.Random; public class Main { public static void main(String[] args) { Random random = new Random(); random.setSeed((int) new Date().getTime()); ByteBuffer byteBuffer = ByteBuffer.allocate(10000 * 4); long start = System.currentTimeMillis(); ByteOrder order; ByteBuffer tmpBuffer; int[] ints; IntBuffer intBuffer; long end; // ビックエンディアン order = ByteOrder.BIG_ENDIAN; tmpBuffer = byteBuffer.order(order); ints = tmpBuffer.asIntBuffer().array(); //エラー発生:UnsupportedOperationException() intBuffer = IntBuffer.wrap(ints); System.out.println("ビックエンディアンで実行"); printChunk(random, ints, intBuffer); end = System.currentTimeMillis(); System.out.print("経過時間:"); System.out.println((end - start) + "msec\t"); // リトルエンディアン start = System.currentTimeMillis(); order = ByteOrder.LITTLE_ENDIAN; tmpBuffer = byteBuffer.order(order); ints = tmpBuffer.asIntBuffer().array(); //エラー発生:UnsupportedOperationException() intBuffer = IntBuffer.wrap(ints); System.out.println("リトルエンディアンで実行"); printChunk(random, ints, intBuffer); end = System.currentTimeMillis(); System.out.print("経過時間:"); System.out.println((end - start) + "msec\t"); } ========================================= 以上

    • ベストアンサー
    • Java
  • JavaのDateクラスについて教えてください.

    下のプログラムを実行すると, Date : Mon Jan 30 15:30:00 JST 2006 となります. 私としては,Apr となることを期待するのですが, おかしいでしょうか? Javaの環境は,jdk1.5.0_05 です. // ここから import java.text.SimpleDateFormat; import java.util.Date; public class DateTest { public static void main(String[] args) throws Exception { String dateStr = "2006/04/30 15:30"; Date date = new SimpleDateFormat("yyyy/MM/DD HH:mm").parse(dateStr); System.err.println("Date : " + date); } }

  • 日付チェックについて。

    文字列の日付妥当性チェックについて、SimpleDateFormat#parseをいままで使っていました。 先日、末尾が英字でも例外が発生しないことに気づきました。 途中に存在するともちろん例外が発生します。 例) public static void main(String[] args) { Date date = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); sdf.setLenient(false); try { date = sdf.parse("2000011a"); // ←例外がスローされない。 // date = sdf.parse("200001a1"); ←例外がスローされる。 } catch (Exception e) { System.out.println("exception"); return; } System.out.println(date); } 末尾に英字があってもOKなのは仕様なのでしょうか? このことがわかった後はparseの前にInteger.parseInt(date)を呼び出して、数字であることをチェックしてから日付妥当性を確認しています。 文字列を分割してCalenderクラスのgetTime()などで妥当性チェックを行うことも可能とは思いますが、どうにも納得できな挙動だったので質問させて頂きました。 グーグル先生に教えてもらおうとしたのですが、このことに触れられているサイトが見当たらず・・・ご存知の方がいらっしゃいましたら教えて頂けないでしょうか。 ※JDKのバージョンは1.4と1.5で確認いたしました。

    • ベストアンサー
    • Java
  • 和暦変換フォーマット用メソッドについて

    private void 生年月日編集(String 生年月日, PrintWriter out) { SimpleDateFormat sdf1 = new SimpleDateFormat(生年月日); sdf1.setLenient(false); Date d = sdf1.parse("20120705", new ParsePosition(0)); SimpleDateFormat sdf2 = new SimpleDateFormat("GGGGyyyy年M月d日", new Locale("ja", "JP", "JP")); System.out.println(sdf2.format(d)); 上記の和暦変換プログラムを フォーマット用メソッドとして和暦変換プログラムを呼び だすようにしたいのですが うまくいきません。 アドバイスよろしくお願いいたします。

    • ベストアンサー
    • Java
  • java.util.Dateについて

    まずは下記ソースを参照してください。 import java.util.Date; import java.util.GregorianCalendar; import java.util.Calendar; public class Test{     public static void main( String args[] ){         GregorianCalendar cal = new GregorianCalendar(2004, 5, 31);         System.out.println("年:" + cal.get(Calendar.YEAR));         System.out.println("月:" + cal.get(Calendar.MONTH));         System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));         System.out.println(); // ただの改行         System.out.println("比較:" + new Date().compareTo(cal.getTime()));     } } 上記ソースについて質問です。 1.「年」「月」「日」を表示しておりますが、本来ならば 「年:2004」 「月:5」 「日:31」 と表示されると思っておりましたが実際は、 「年:2004」 「月:6」 「日:1」 と表示されてしまいます。 なぜでしょうか? 2.12行目にてjava.util.DateクラスのcompareToメソッドを用いて、 現在日付(2004/5/28)と7行目で指定している日付の比較をしていますが、 7行目で設定している日付を現在日付よりも前後に設定して実行させても、 「-1」しか返りません。 なぜでしょうか? 環境は、 J2SDK:1.4.2 OS:Windows XP Pro です。

    • ベストアンサー
    • Java