将小时和分钟存储在 java 中
Store hours and minutes in java
我在我的应用程序中使用 jodaTime,我必须存储小时和分钟,例如56:45(表示 56 小时 45 分钟)。我已经尝试使用 LocalTime(joda localtime),但这种类型只接受 24 小时之前的时间,并且 alos 无法存储 mongoDB 中的 Spring 数据。我现在的问题是要使用哪种类型?
目前我有 Strings 但我对此不是很满意
JodaTime
有可以表示时间段的Period
class。虽然我认为如果你想存储 56 小时,你可能需要将它保存为 2 天 8 小时,然后当你解析它时显示它你想要的。
http://joda-time.sourceforge.net/apidocs/org/joda/time/Period.html
不然,看看JavaTimeSpan
class。
https://docs.oracle.com/javase/tutorial/datetime/iso/period.html
如果您想创建自己的时间 class,它可能看起来像这样:
public class Time {
private final int minutesPastMidnight;
public Time(String timeString) {
int hours = Integer.valueOf(timeString.substring(0, 2));
int minutes = Integer.valueOf(timeString.substring(3, 5));
this.minutesPastMidnight = hours * 60 + minutes;
}
public Time(Time time) {
this.minutesPastMidnight = time.getMinutesPastMidnight();
}
private int getMinutesPastMidnight() {
return minutesPastMidnight;
}
public int difference(Time time) {
return this.getMinutesPastMidnight()
- time.getMinutesPastMidnight();
}
public Time min(Time time) {
return (difference(time) > 0) ? time : this;
}
public Time max(Time time) {
return (difference(time) > 0) ? this : time;
}
@Override
public String toString() {
int hours = minutesPastMidnight / 60;
int minutes = minutesPastMidnight - (hours * 60);
return String.format("%02d:%02d", hours, minutes);
}
}
您应该始终将 UTC
中的日期和时间存储为数据库中的 java.util.Date
。
在你的情况下,我认为你必须使用 String
但你可以使用 Period
对象作为 String
.
而不是使用小时和分钟
我试了一下,希望对你有帮助。
public static void main(String[] args) {
// You have "56:45" as string, firstly change all this values to Period Object including days, hours and minutes
Period newPeriod = convertStringtoPeriod("56:45");
// Store newPeriod as String in DB
// When using it crate a Period Object from it and use it.
System.out.println("*** Period in Main Method *** =" + newPeriod);
// now you have a period object including days, hours and minutes
System.out.println("*** Days in Main Method *** =" + newPeriod.getDays());
System.out.println("*** Hours in Main Method *** =" + newPeriod.getHours());
System.out.println("*** Minutes in Main Method *** =" + newPeriod.getMinutes());
}
public static Period convertStringtoPeriod(String hoursAndMinutes) {
// Firstly create a formatter for your coming String
PeriodFormatter dateFormat = new PeriodFormatterBuilder().appendHours().appendSeparator(":").appendMinutes().toFormatter();
// create a period including hours and minutes
Period period = dateFormat.parsePeriod(hoursAndMinutes);
// create total duration of this period
Duration duration = period.toStandardDuration();
// get days from duration
long days = duration.getStandardDays();
System.out.println("day count =" + days);
// subtract days millis from total duration millis
duration = duration.minus(days * (1000 * 60 * 60 * 24));
// get hours from duration
long hours = duration.getStandardHours();
System.out.println("hour count =" + hours);
// subtract hours millis from total duration millis
duration = duration.minus(hours * (1000 * 60 * 60));
// get minutes from duration
long minutes = duration.getStandardMinutes();
System.out.println("minute count =" + minutes);
// to Store in DB
Period periodStoredInDB = new Period(0, 0, 0, (int) days, (int) hours, (int) minutes, 0, 0);
return periodStoredInDB;
}
输出是;
day count =2
hour count =8
minute count =45
*** Period in Main Method *** =P2DT8H45M
*** Days in Main Method *** =2
*** Hours in Main Method *** =8
*** Minutes in Main Method *** =45
在这种情况下,我建议您将 P2DT8H45M
存储在数据库中作为 String
。
我在我的应用程序中使用 jodaTime,我必须存储小时和分钟,例如56:45(表示 56 小时 45 分钟)。我已经尝试使用 LocalTime(joda localtime),但这种类型只接受 24 小时之前的时间,并且 alos 无法存储 mongoDB 中的 Spring 数据。我现在的问题是要使用哪种类型?
目前我有 Strings 但我对此不是很满意
JodaTime
有可以表示时间段的Period
class。虽然我认为如果你想存储 56 小时,你可能需要将它保存为 2 天 8 小时,然后当你解析它时显示它你想要的。
http://joda-time.sourceforge.net/apidocs/org/joda/time/Period.html
不然,看看JavaTimeSpan
class。
https://docs.oracle.com/javase/tutorial/datetime/iso/period.html
如果您想创建自己的时间 class,它可能看起来像这样:
public class Time {
private final int minutesPastMidnight;
public Time(String timeString) {
int hours = Integer.valueOf(timeString.substring(0, 2));
int minutes = Integer.valueOf(timeString.substring(3, 5));
this.minutesPastMidnight = hours * 60 + minutes;
}
public Time(Time time) {
this.minutesPastMidnight = time.getMinutesPastMidnight();
}
private int getMinutesPastMidnight() {
return minutesPastMidnight;
}
public int difference(Time time) {
return this.getMinutesPastMidnight()
- time.getMinutesPastMidnight();
}
public Time min(Time time) {
return (difference(time) > 0) ? time : this;
}
public Time max(Time time) {
return (difference(time) > 0) ? this : time;
}
@Override
public String toString() {
int hours = minutesPastMidnight / 60;
int minutes = minutesPastMidnight - (hours * 60);
return String.format("%02d:%02d", hours, minutes);
}
}
您应该始终将 UTC
中的日期和时间存储为数据库中的 java.util.Date
。
在你的情况下,我认为你必须使用 String
但你可以使用 Period
对象作为 String
.
我试了一下,希望对你有帮助。
public static void main(String[] args) {
// You have "56:45" as string, firstly change all this values to Period Object including days, hours and minutes
Period newPeriod = convertStringtoPeriod("56:45");
// Store newPeriod as String in DB
// When using it crate a Period Object from it and use it.
System.out.println("*** Period in Main Method *** =" + newPeriod);
// now you have a period object including days, hours and minutes
System.out.println("*** Days in Main Method *** =" + newPeriod.getDays());
System.out.println("*** Hours in Main Method *** =" + newPeriod.getHours());
System.out.println("*** Minutes in Main Method *** =" + newPeriod.getMinutes());
}
public static Period convertStringtoPeriod(String hoursAndMinutes) {
// Firstly create a formatter for your coming String
PeriodFormatter dateFormat = new PeriodFormatterBuilder().appendHours().appendSeparator(":").appendMinutes().toFormatter();
// create a period including hours and minutes
Period period = dateFormat.parsePeriod(hoursAndMinutes);
// create total duration of this period
Duration duration = period.toStandardDuration();
// get days from duration
long days = duration.getStandardDays();
System.out.println("day count =" + days);
// subtract days millis from total duration millis
duration = duration.minus(days * (1000 * 60 * 60 * 24));
// get hours from duration
long hours = duration.getStandardHours();
System.out.println("hour count =" + hours);
// subtract hours millis from total duration millis
duration = duration.minus(hours * (1000 * 60 * 60));
// get minutes from duration
long minutes = duration.getStandardMinutes();
System.out.println("minute count =" + minutes);
// to Store in DB
Period periodStoredInDB = new Period(0, 0, 0, (int) days, (int) hours, (int) minutes, 0, 0);
return periodStoredInDB;
}
输出是;
day count =2
hour count =8
minute count =45
*** Period in Main Method *** =P2DT8H45M
*** Days in Main Method *** =2
*** Hours in Main Method *** =8
*** Minutes in Main Method *** =45
在这种情况下,我建议您将 P2DT8H45M
存储在数据库中作为 String
。