繁体   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