Java 我得到了以毫秒为单位的时间。我如何以hh:mm:ss格式得到两个日期之间的差来存储在数据库中
这是我的Java 我得到了以毫秒为单位的时间。我如何以hh:mm:ss格式得到两个日期之间的差来存储在数据库中,java,time,duration,Java,Time,Duration,这是我的defaultuser服务类,我希望差异以hh:mm:ss格式存储在数据库中(我使用的是SpringMVC+hibernate) 这是我的pojo课程。我花的时间和你一样长 请告诉我合适的答案。谢谢:) //假设差值以毫秒为单位 DateFormat df=新的简化格式(“dd:MM:yy:HH:MM:ss”); System.out.println(df.format(diff)) //如果需要,请删除dd:mm:yy 修改实体类,如下面所示,以指定日期的格式 //Create Tab
defaultuser
服务类,我希望差异以hh:mm:ss
格式存储在数据库中(我使用的是SpringMVC+hibernate)
这是我的pojo课程。我花的时间和你一样长
请告诉我合适的答案。谢谢:)
//假设差值以毫秒为单位
DateFormat df=新的简化格式(“dd:MM:yy:HH:MM:ss”);
System.out.println(df.format(diff))
//如果需要,请删除dd:mm:yy
修改实体类,如下面所示,以指定日期的格式
//Create Table SQL in SQL Server
CREATE TABLE "DBO"."Test"(
Id INT PRIMARY KEY NOT NULL,
difftime TIME not null
)
//Entity Code
@Entity(name = "Test")
@Table(name = "Test")
public class Test {
@Id
@Column(name = "Id")
private int id;
@Column(name = "difftime")
@DateTimeFormat(pattern = "hh:mm:ss")
private Date time;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
}
//用于保存的控制器代码
@Override
@Transactional
public LoginLog punchLogoutTime(User user) {
LoginLog log = getOpenUserLoginLog(user);
log.setLogoutTime(new Date());
long diff=log.getLogoutTime().getTime()-log.getLoginTime().getTime();
Date totalTimeIn=new Date();
totalTimeIn.setTime(diff);
log.setTotalTime(totalTimeIn);
log = loginLogDao.update(log);
return log;
}
这不是一个好方法,因为即使您生成这样的日期并将其格式设置为
hh:mm:ss
,超过24小时的持续时间也会被错误地存储。您有以毫秒为单位的时间吗?然后很简单,只需将毫秒
除以'24*60*60*1000',您就应该存储一个非格式化值(想象有人稍后要求您使用不同的格式),将持续时间存储为长
,现在这样做要好得多。如果您需要将其格式化为某种文本表示形式,请使用或编写您自己的方法(在服务器端或客户端)。我是否需要更改defaultuser类中的任何内容??您使用的是哪个数据库?我知道SQLServer有时间数据类型。我使用mysql。但当我将总时间更改为日期时,我也需要更改defaultuser类,它会给我错误(将diff的类型更改为long…。我刚刚为您编写了一个示例,并对其进行了编辑和发布。shaan,您能用您的例外更新我吗?感谢您的帮助。但我没有想到使用testSave方法。我需要使用相同的方法进行编辑。我做到了!没有效果!:(让我看看你的代码你做了什么?我不知道放在哪里。但我把它放在:LoginLog log=getOpenUserLoginLog(用户);log.setLogoutTime(新日期());long diff=log.getLogoutTime().getTime()-log.getLoginTime().getTime();DateFormat df=new SimpleDateFormat(“dd:MM:yy:HH:MM:ss”);System.out.println(df.format(diff));log.setTotalTime(diff);log=loginLogDao.update(log);return log;将setTotalTime(diff)更改为setTotalTime(df.format(diff)),然后适当地将pojo更改为将字符串作为输入而不是long。感谢Gaurav,我认为您已经接近它了。!当我调试它时,一切都很好,但最后它给了我一个异常(java.sql.SQLException:第1行“total_time”列的数据被截断)。。。。
//assume diff is in millisec
DateFormat df = new SimpleDateFormat("dd:MM:yy:HH:mm:ss");
System.out.println(df.format(diff));
//remove dd:mm:yy if you want
//Create Table SQL in SQL Server
CREATE TABLE "DBO"."Test"(
Id INT PRIMARY KEY NOT NULL,
difftime TIME not null
)
//Entity Code
@Entity(name = "Test")
@Table(name = "Test")
public class Test {
@Id
@Column(name = "Id")
private int id;
@Column(name = "difftime")
@DateTimeFormat(pattern = "hh:mm:ss")
private Date time;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
}
@Override
@Transactional
public LoginLog punchLogoutTime(User user) {
LoginLog log = getOpenUserLoginLog(user);
log.setLogoutTime(new Date());
long diff=log.getLogoutTime().getTime()-log.getLoginTime().getTime();
Date totalTimeIn=new Date();
totalTimeIn.setTime(diff);
log.setTotalTime(totalTimeIn);
log = loginLogDao.update(log);
return log;
}