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;
        }