[英]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; }
您的問題有點令人困惑。 在您的問題中,您僅從查詢"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.