MySQL的date資料型別轉換問題及兩個時間戳時間間隔的時間
由於更換資料庫的原因,MySQL遇到了各種坑。
在MySQL資料庫裡建表表欄位為COLLECT_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
實際上該欄位是date。很奇怪,
然後在java裡面獲取該欄位值居然是英文的時間戳格式: Wed Oct 17 21:34:52 CST 2018
【1】自己寫了一個英文格式時間戳轉換為中文時間戳的方法:
public static String getTimeEIntoC(Date date) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.format(date); }
【2】計算兩個時間戳之間間隔的毫秒數
public static long getTimeMillisInterval(String beginTime, String endTime) { long interval = 0; long beginMillis = 0; long endMillis = 0; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { beginMillis = simpleDateFormat.parse(beginTime).getTime(); endMillis = simpleDateFormat.parse(endTime).getTime(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (endMillis > beginMillis) { interval = endMillis - beginMillis; } return interval; }
【3】計算兩個時間戳之間間隔的年,月,日,時,分,秒(注意java相乘的溢位問題)
public static String getTimeInterval(String beginTime, String endTime) { String interval = ""; long intervalMillis = getTimeMillisInterval(beginTime, endTime); if (intervalMillis > 365 * 24 * 60 * 60 * 1000L) { // 年 interval = (intervalMillis / (365 * 24 * 60 * 60 * 1000L)) + "年前"; } else if (intervalMillis > 30 * 24 * 60 * 60 * 1000L) { // 月 interval = (intervalMillis / (30 * 24 * 60 * 60 * 1000L)) + "月前"; } else if (intervalMillis > 24 * 60 * 60 * 1000L) { // 日 interval = (intervalMillis / (24 * 60 * 60 * 1000L)) + "天前"; } else if (intervalMillis > 60 * 60 * 1000L) { // 時 interval = (intervalMillis / (60 * 60 * 1000L)) + "小時前"; } else if (intervalMillis > 60 * 100L) { // 分 interval = (intervalMillis / (60 * 1000L)) + "分前"; } else { // 秒 interval = intervalMillis / 1000 + "秒前"; } return interval; }
eg:log.info(getTimeInterval("2018-10-10 14:53:23", OptionUtil.getCurrentTime()));
由於是自己練手的專案,資料庫更換之後
對MySQL不太熟悉,及java時間的處理不太熟練。先這樣處理著吧。有更好的方法再去更改。