下記のようなStringで与えられる年月日時分秒
"2014/12/20 23:45:23"と
現在の時刻を比較し、
与えられた時刻から現在までyy年mmか月dd日 hh時間mm分ss秒経過
のように表示したいのですが、詰まってます。
わかりやすい例で行くと
下記サイトさんに時分秒を追加したような感じです。
http://keisan.casio.jp/exec/system/1177658154
追記
うるう年は考慮したいです。
月が違う場合例えば2016年1月1日~3月4日だと初日を1日目としたとすると、2か月と4日になります。
2016年2月28日~4月1日なら1か月と4日ですが、今年はうるう年なので1カ月と5日になります。
2月28日~4月28日ですと2か月と1日、2月28日~4月29日ですと2か月と2日になります。
とりあえず下記のプログラムで
大半は取得できていますが、○○日経過の
○○日の部分が出せていません。
経過月数を使って何かと引き算すれば出せそうな気がするのですが思いつきません。
java
1public class DifferenceDays { 2 public int differenceDay; //期間の全日数 3 public int differenceMonth; //期間の全月数 4 public int differenceYear; //経過年数 5 public int month; //1年未満の経過月数 6 public int day; //1か月未満の経過日数 7 public int hour; //経過時 8 public int minute; //経過分 9 public int second; //経過秒 10} 11 12public class DifferenceDaysCalc { 13 14 public DifferenceDays date; 15 16 public DifferenceDaysCalc(){ 17 date = new DifferenceDays(); 18 } 19 20 public DifferenceDays calcDay(String day){ 21 String _day; 22 Date start = null; 23 Date today = null; 24 try { 25//とりあえず固定値でテスト 26 start = new SimpleDateFormat("yyyy'/'MM'/'dd HH:mm:ss", Locale.JAPANESE).parse("2016/1/24 12:34:12"); 27 today = new SimpleDateFormat("yyyy'/'MM'/'dd HH:mm:ss", Locale.JAPANESE).parse("2016/1/25 00:10:00"); 28 // SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 29 // String str = format.format(new Date()); 30 // today = format.parse(str); 31 } 32 catch (Exception e) { 33 } 34 date.differenceDay = differenceDays(today, start); //経過日数 35 date.differenceMonth = differenceMonth(today, start); //経過月数 36 date.differenceYear = date.differenceMonth / 12; //経過年数 37 date.Month = date.differenceMonth % 12; //1年未満の経過月数 //1年未満の経過月数 38 //1か月未満の経過日数 39 date.hour = differenceHours(today, start); //経過時 40 date.minute = differenceMinute(today, start); //経過分 41 date.second = differenceSecond(today, start); //経過秒 42 return date; 43 } 44 45 public static int differenceDays(Date date1,Date date2) { 46 long datetime1 = date1.getTime(); 47 long datetime2 = date2.getTime(); 48 long one_date_time = 1000 * 60 * 60 * 24; 49 long diffDays = (datetime1 - datetime2) / one_date_time; 50 return (int)diffDays; 51 } 52 53 public static int differenceHour(Date date1,Date date2) { 54 long datetime1 = date1.getTime(); 55 long datetime2 = date2.getTime(); 56 long diffHour = (datetime1 - datetime2) / 1000 / 60 / 60 % 24; 57 return (int)diffHour; 58 } 59 60 public static int differenceMinute(Date date1,Date date2) { 61 long datetime1 = date1.getTime(); 62 long datetime2 = date2.getTime(); 63 long diffMinute = (datetime1 - datetime2) / 1000 / 60 % 60; 64 65 return (int)diffMinute; 66 } 67 68 public static int differenceSecond(Date date1,Date date2) { 69 long datetime1 = date1.getTime(); 70 long datetime2 = date2.getTime(); 71 long diffSecond = (datetime1 - datetime2) / 1000 % 60; 72 return (int)diffSecond; 73 } 74 75 public static int differenceMonth(Date date1, Date date2) { 76 Calendar cal1 = Calendar.getInstance(); 77 cal1.setTime(date1); 78 cal1.set(Calendar.DATE, 1); 79 Calendar cal2 = Calendar.getInstance(); 80 cal2.setTime(date2); 81 cal2.set(Calendar.DATE, 1); 82 int count = 0; 83 if (cal1.before(cal2)) { 84 while (cal1.before(cal2)) { 85 cal1.add(Calendar.MONTH, 1); 86 count--; 87 } 88 } else { 89 count--; 90 while (!cal1.before(cal2)) { 91 cal1.add(Calendar.MONTH, -1); 92 count++; 93 } 94 } 95 return count; 96 } 97}
月が違う場合日付をどうとらえるか、具体例が数個ないと回答が示せません。
1月1日から3月4日や
2月28日から4月1日、4月28日、4月29日
うるう年が挟まるかどうかで数え方を変えるかどうか。
それらをどう数えたいか具体的に質問に書かなければなりません。
経過時間を計算しようとしているのに、初日で1日目とカウントしていいのですか?始点と終点を同じ日時にした場合でも「1日」という扱いになりますが。
構いません。
そこは後でで初日を含むのか含まないのか設定で変えれるようにするつもりですので。
それと、2016年2月28日~4月1日の期間の扱いが、うるう年か否かで変わるというのがどうにも解せないのですが。2月28日~3月28日の期間もうるう年か否かで(1か月と1日か1か月と2日か)変わるのですか?
もう2月は一律28日で計算していいのでは?普通なら2/28-4/28はジャスト2ヶ月でっせ
