簡體   English   中英

如何從保存數據庫中值的java中的字符串數組中計算一個小時前的時間

[英]How to calculate one hour ago time from an string array in java which holds value from database

我有一個字符串類型數組,用於保存來自數據庫的值,格式為“ 2014-09-02 15:19:59.000”。該數組具有3600行。現在我想從Java中的這些值計算一個小時前的時間。怎么做。 用於從數據庫中檢索值的選擇代碼是:

 public String[] database_Current() { List < String > timeStr = new ArrayList < String > (); try { con = getConnection(); String sql = "select max(logtime) from vacuum_analog_1mins"; clstmt = con.prepareCall(sql); clstmt.execute(); rs = clstmt.getResultSet(); while (rs.next()) { timeStr.add(rs.getString(1).substring(11, 16)); } } catch (Exception e) { System.out.println("\\nException in Bean in getDbTable(String code):" + e); } finally { closeConnection(); } // I would return the list here, but let's convert it to an array atime = timeStr.toArray(new String[timeStr.size()]); return atime; } 
如何從atime值獲取一小時前的值。

您的問題有點令人困惑。 在您的問題中,您僅從查詢"select max(logtime) from vacuum_analog_1mins" ,該行包含max(logtime)單列以及您存儲在timeStr數組中的單個值。 即使您每次都會獲得單個值,我也沒有得到在這里使用數組存儲單個值的目的。

我得到的是您想要的時間比從數據庫獲取的實際時間少一小時。

例:

從數據庫獲取:

currentDateFromDB = 2014-09-02 15:19:59.000

您想要擁有:

changedDate = 2014-09-02 14:19:59.000

為此,您可以將java的Calendar類用作:

//currentDateFromDB in string form from db
Date parsedDate = new Date();
try {
    SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    parsedDate = format.parse(currentDateFromDB);
}
catch(ParseException pe) {
     throw new IllegalArgumentException();
}

Calendar calendar=Calendar.getInstance();
calendar.setTime(parsedDate); //set date here
int hours = calendar.get(Calendar.HOUR_OF_DAY);
hours--; //reduce by one
calendar.set(Calendar.HOUR_OF_DAY, hours); //again set desired hours
Date date=calendar.getTime(); //get modified time

我更喜歡使用Joda DateTime來操縱日期,這是關於它的辯論https://softwareengineering.stackexchange.com/questions/190891/joda-time-vs-java-time

有關您的問題的內容,以下代碼段:

String sDate = "2014-09-02 15:19:59.000";
String format = "yyyy-MM-dd HH:mm:ss.SSS";
DateTime oDate = DateTime.parse(sDate,
        DateTimeFormat.forPattern(format));
System.out.println( oDate.minusHours(1).toString(format));

版畫

2014-09-02 14:19:59.000

進口

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;

如果您無法使用DateTime,則僅使用java.util的解決方案將如kriyeta所建議的那樣進行一些修復:

String sDate = "2014-09-02 15:19:59.000";
String format = "yyyy-MM-dd HH:mm:ss.SSS";    
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
Date date = simpleDateFormat.parse(sDate);
Calendar calendar=Calendar.getInstance();
calendar.setTime(date); 
int hours = calendar.get(Calendar.HOUR_OF_DAY);
hours--; 
calendar.set(Calendar.HOUR_OF_DAY, hours);
Date fixedDate=calendar.getTime(); 
System.out.println(simpleDateFormat.format(fixedDate));

關於注釋,要使輸出看起來相同,您需要對齊格式,因此

System.out.println(date + "-" + fixedDate); // Tue Sep 02 15:19:59 CEST 2014-Tue Sep 02 14:19:59 CEST 2014

要么

 System.out.println(simpleDateFormat.format(date) + "-" + simpleDateFormat.format(fixedDate)); // 2014-09-02 15:19:59.000-2014-09-02 14:19:59.000

但是您可以完全控制日期如何以字符串表示,所以不要讓它感到困惑,唯一重要的是正確設置Date實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM