date型で 複数の日時と時刻が含まれるデータがあります、これをjavaで全部足して合計時間を出すにはどうすればいいでしょうか。
例えば
2016-2-25 06:30:10
2016-2-26 04:20:55
2016-2-27 10:45:24
とかのデータがあります(数十件)。
この時刻だけを足して、合計21:36:29と算出したいのですが、
どうすればいいでしょうか。
HH,mm,ssそれぞれを抽出した場合、切り上げはどう記述すればいいでしょうか。
もしくは何かしら簡単に算出できるメソッド?などありますか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
Stringから抽出して見ました
java
1import java.util.Date; 2 3public class V{ 4 5 6public static void main(String[] args){ 7 8Date d=new Date(); 9Date e=new Date(); 10Date f=new Date(); 11 12 13System.out.println("d:"+d); 14 15System.out.println("e:"+e); 16 17System.out.println("f:"+f); 18 19 20 21String[] d2=d.toString().split(" ", 0); 22String[] d3=d2[3].split(":", 0); 23 24String[] e2=d.toString().split(" ", 0); 25String[] e3=e2[3].split(":", 0); 26 27String[] f2=f.toString().split(" ", 0); 28String[] f3=f2[3].split(":", 0); 29 30 31int d33[]=new int[3]; 32int e33[]=new int[3]; 33int f33[]=new int[3]; 34 35 36try{ 37 38for(int i=0;i<3;i++){ 39d33[i]=Integer.parseInt(d3[i]); 40e33[i]=Integer.parseInt(e3[i]); 41f33[i]=Integer.parseInt(f3[i]); 42 43 44} 45 46}catch(Exception v){} 47 48 49int g=0,h=0,i=0; 50 51h=h+(d33[2]+e33[2]+f33[2])/60; 52i=i+(d33[2]+e33[2]+f33[2])%60; 53 54g=(h+d33[1]+e33[1]+f33[1])/60; 55h=(h+d33[1]+e33[1]+f33[1])%60; 56 57g=g+d33[0]+e33[0]+f33[0]; 58 59System.out.println(g+":"+h+":"+i); 60 61 62} 63 64 65}
投稿2016/10/31 04:51

退会済みユーザー
総合スコア0
0
他の方の回答にも有りますが、Calendarクラスを使って時分秒のみ加算する方法が有るかと思います。
上記コンテンツのサンプルが簡単かと思いますが、時間がオーバーフロー(24を超えた)場合は日の増加をチェックする必要があるので、その方法は別途必要になります。
投稿2016/02/27 00:03
総合スコア1339
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
Java8が使えるなら、それぞれをLocalTimeに変換してLocalTime.MIDNIGHTとDuration.between()を使ってDurationに変換して、それらを足しあわせていくという格好でしょうか…
java
1import java.time.Duration; 2import java.time.LocalTime; 3import java.time.format.DateTimeFormatter; 4import java.time.format.DateTimeParseException; 5import java.util.Scanner; 6import java.util.stream.Stream; 7 8public class Q28301 { 9 10 public static void main(String[] args) { 11 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-M-d HH:mm:ss"); 12 Stream.Builder<LocalTime> builder = Stream.builder(); 13 try (Scanner s = new Scanner(System.in)){ 14 while(s.hasNextLine()){ 15 try { 16 builder.accept(LocalTime.parse(s.nextLine(), dtf)); 17 18 //当方の環境では入力終了がうまく認識しないため無理やり脱出 19 } catch (DateTimeParseException e) { 20 break; 21 } 22 } 23 Duration d = builder.build().map(e -> Duration.between(LocalTime.MIDNIGHT, e)) 24 .reduce((e1, e2) -> e1.plus(e2)) 25 .orElse(Duration.ZERO); 26 System.out.println(d); 27 } 28 } 29 30} 31
HH,mm,ssそれぞれを抽出した場合、切り上げはどう記述すればいいでしょうか。
もしくは何かしら簡単に算出できるメソッド?などありますか。
HH,mm,ss同士て加算して、24または60で割った商を繰り上げて余りを再設定すればいいだけでは?
java
1List<String> dates; //上記の時刻データが格納されているListとする 2int hour = 0; 3int min = 0; 4int sec = 0; 5DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 6Calendar cal = Calendar.getInstance(); 7for (String date : dates) { 8 //文字列を時刻解析して、時分秒ごとに加算 9 cal.setTime(format.parse(date)); 10 hour += cal.get(Calendar.HOUR); 11 min += cal.get(Calendar.MINUTE); 12 sec += cal.get(Calendar.SECOND); 13} 14//秒→分の繰り上がり 15min += sec / 60; 16sec %= 60; 17//分→時の繰り上がり 18hour += min / 60; 19min %= 60;
投稿2016/02/26 05:11
編集2016/10/31 16:18総合スコア20675
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
以下のようにdateクラスの差分を求めて、加算する方式はいかがでしょうか?
60000で割っているところはdateクラスの差分がミリ秒でかえってくるので、分に変換しています。
import java.io.;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.;
public class Main {
public static void main(String args[]) throws ParseException { ArrayList<String> samplelist = new ArrayList<String>(); long date_diff=0; samplelist.add("2016-2-25 06:30:10"); samplelist.add("2016-2-26 04:20:55"); samplelist.add("2016-2-27 10:45:24"); DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); for(int i=0;i<samplelist.size()-1;i++){ // Dateクラスを二つ定義(差分を出すため) Date dt_upper = df.parse(samplelist.get(i+1)); Date dt_downer = df.parse(samplelist.get(i)); /* date_diff * 二つの時刻(dt_upper,dt_downer)の差分は * 結果がミリ秒のため60,000で割って分に直す */ date_diff= date_diff + ((dt_upper.getTime() - dt_downer.getTime()) / 60000); } System.out.println("合計時間="+date_diff + " 分"); }
}
投稿2016/02/25 16:04
総合スコア23
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Calendarを使うと良いのではないでしょうか。
http://java-reference.sakuraweb.com/java_date_calendar.html
//年を未定義にする
cal.clear(Calendar.YEAR);
投稿2016/02/25 14:14
総合スコア5488
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。