java.util.Date/JodaTime:给定java.util.Date,生成给定日期的开始和结束
如果给我一个特定的java.util.Date,我如何生成给定日期的开始和结束。例如,我的日期是2011年8月25日,那么我的开始日期是2011年8月25日,我的结束日期是2011年8月25日 背景:(如果你想知道我为什么问这个问题,请阅读下面的内容) 我使用JPA将java.util.Date/JodaTime:给定java.util.Date,生成给定日期的开始和结束,java,date,jpa,jodatime,Java,Date,Jpa,Jodatime,如果给我一个特定的java.util.Date,我如何生成给定日期的开始和结束。例如,我的日期是2011年8月25日,那么我的开始日期是2011年8月25日,我的结束日期是2011年8月25日 背景:(如果你想知道我为什么问这个问题,请阅读下面的内容) 我使用JPA将date映射到MySql数据库,如下所示。我希望date也有时间,所以我使用TemoporalType.TIMESTAMP @Temporal(TemporalType.TIMESTAMP) private Date datePro
date
映射到MySql数据库,如下所示。我希望date
也有时间,所以我使用TemoporalType.TIMESTAMP
@Temporal(TemporalType.TIMESTAMP)
private Date dateProcess; //java.util.Date
我需要查询给定特定日期的所有数据,因为date
如上所述存储,所以我需要一个日期范围来实现我想要的
我的游戏计划是将
java.util.Date
转换为JodaTime#DateTinme
,然后在那里构建开始和结束日期,并将其转换回,以便我可以作为参数传递给JPQL。但JodaTime似乎是不可变的,我在任何地方都看不到setter方法 我相信您想要的类型是DateMidnight
。创建一个新的DateMidnight
并将有问题的DateTime
传递给它,它将采用当天上午午夜的日期。然后,您还可以使用plusDays()
函数添加1天以获得结束时间。我相信您需要的类型是DateMidnight
。创建一个新的DateMidnight
并将有问题的DateTime
传递给它,它将采用当天上午午夜的日期。然后,您还可以使用plusDays()
函数添加一天来获取结束时间。Ajava.util.Date
表示时间上的一个瞬间,不参考时区或日历。根据观察者所在时区的不同,同一时刻的开始/结束时间会有很大的不同
你可以这样做:
DateTime dateTime = new DateTime(date.getTime(), timeZone);
LocalDate localDate = dateTime.ToLocalDate();
DateTime startOfDay = localDate.toDateTimeAtStartOfDay(timeZone);
DateTime startOfNextDay = localDate.plusDays(1).toDateTimeAtStartOfDay(timeZone);
如果需要,可以从最后两个变量返回到java.util.Date
值。通常都是午夜,但可能不是
请注意,您应该以独占方式使用第二天的开始,而不是以包含方式使用当前一天的最后一秒,以避免丢失值,例如2011年8月25日23:59:59.500…A
java.util.Date
表示时间上的一个瞬间,不参考时区或日历。根据观察者所在时区的不同,同一时刻的开始/结束时间会有很大的不同
Date date; // your date
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date startDate = calendar.getTime();
calendar.set(Calendar.HOUR, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date endDate = calendar.getTime();
你可以这样做:
DateTime dateTime = new DateTime(date.getTime(), timeZone);
LocalDate localDate = dateTime.ToLocalDate();
DateTime startOfDay = localDate.toDateTimeAtStartOfDay(timeZone);
DateTime startOfNextDay = localDate.plusDays(1).toDateTimeAtStartOfDay(timeZone);
如果需要,可以从最后两个变量返回到java.util.Date
值。通常都是午夜,但可能不是
请注意,您应该以独占方式使用第二天的开始,而不是以包含方式使用当前一天的最后一秒,以避免丢失值,例如2011年8月25日23:59:59.500…我倾向于避免使用
DateMidnight
,因为并非每个时区的每一天都有午夜LocalDate.toDateTimeAtStartOfDay
是一个更好的调用,我以前从未使用过。谢谢我倾向于避开DateMidnight,因为并非每个时区的每一天都有午夜LocalDate.toDateTimeAtStartOfDay
是一个更好的调用,我以前从未使用过。谢谢假设系统时区是正确的。。。我还建议使用Joda Time作为更好的API…假设系统时区是正确的。。。我还建议使用Joda Time作为更好的API…date.getDate()
,是date
吗java.util.date
?如果是这样的话,Jon,date.getDate()
?是不是应该是date.getTime()
?@Harry:对不起,我的意思是date.getTime()
-基本上是以毫秒为单位获取长值的方法。非常感谢:)。我现在就试试。date.getDate()
,是date
那里的java.util.date
?如果是这样的话,Jon,date.getDate()
?是不是应该是date.getTime()
?@Harry:对不起,我的意思是date.getTime()
-基本上是以毫秒为单位获取长值的方法。非常感谢:)。我现在就试试。
Date date; // your date
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date startDate = calendar.getTime();
calendar.set(Calendar.HOUR, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date endDate = calendar.getTime();