[英]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.