Java LocalDateTime minusYears用于浮动年数
Java LocalDateTimeJava LocalDateTime minusYears用于浮动年数,java,datetime,floating-point,localdate,Java,Datetime,Floating Point,Localdate,Java LocalDateTimeminusYears需要较长的参数。如果我想减去浮动年数,例如2.5年,我该怎么做 有内置的支持吗 注意:我将值和单位作为用户的输入。上面的问题有点笼统(我在小时、年、周等方面也有同样的问题)。有时可能是2.7小时或2.8年或5.3周等您可以使用和方法来完成这项工作 例如: LocalDateTime dateTime = LocalDateTime.now(); LocalDateTime result = dateTime.minusYears(2).mi
minusYears
需要较长的参数。如果我想减去浮动年数,例如2.5年,我该怎么做
有内置的支持吗
注意:我将值和单位作为用户的输入。上面的问题有点笼统(我在小时、年、周等方面也有同样的问题)。有时可能是2.7小时或2.8年或5.3周等您可以使用和方法来完成这项工作
例如:
LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime result = dateTime.minusYears(2).minusMonths(6);
当你说“2.5”年时,我假设你是指“两年半”,而不是“两年零五个月”,但如果需要,你可以纠正这一点。你可以使用和方法来完成这项工作
例如:
LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime result = dateTime.minusYears(2).minusMonths(6);
当你说“2.5”年时,我假设你的意思是“两年半”,而不是“两年零五个月”,但是的,如果需要的话,你可以纠正它。没有内置的支持,但如果你想牺牲精度,你可以这样做:
public static void main(String[] args) {
LocalDate ld = LocalDate.of(2015, 12, 1);
System.out.println(minusFpYears(ld, 2.5f));
}
static LocalDate minusFpYears(LocalDate ld, float fpyears) {
float fpmonths = fpyears % 1;
long years = (long)(fpyears - fpmonths);
long months = (long)(12L * fpmonths);
return ld.minusYears(years).minusMonths(months);
}
谢谢你的代码!实际上我把值和单位都作为输入。这个 以上问题有点笼统。有时可能是2.7小时 或2.8年或5.3周等
使用
LocalDate minusFpWeeks(LocalDate ld,float fpweeks)
,LocalDateTime minusFpHours(LocalDateTime ld,float fphours)
等函数来处理该问题。没有内置支持,但如果您想牺牲精度,可以这样做:
public static void main(String[] args) {
LocalDate ld = LocalDate.of(2015, 12, 1);
System.out.println(minusFpYears(ld, 2.5f));
}
static LocalDate minusFpYears(LocalDate ld, float fpyears) {
float fpmonths = fpyears % 1;
long years = (long)(fpyears - fpmonths);
long months = (long)(12L * fpmonths);
return ld.minusYears(years).minusMonths(months);
}
谢谢你的代码!实际上我把值和单位都作为输入。这个 以上问题有点笼统。有时可能是2.7小时 或2.8年或5.3周等 使用
LocalDate minusFpWeeks(LocalDate ld,float fpweeks)
,LocalDateTime minusFpHours(LocalDateTime ld,float fphours)
等函数来处理该问题。关于:
double years = 2.5;
long months = (long) (years * 12);// 30 month
LocalDateTime ld = LocalDateTime.now();
ld = ld.minusMonths(months);
但请注意,这可能会损失一些时间,例如,如果您有:
years = 2.7
=>years * 12 > 32.400000000000006
因此,您可能会损失0.400000000000006
一个月
因此,如果你绕过它,可能会更有帮助:
long months = Math.round(years * 12);
编辑: 根据您的评论:
实际上我把值和单位都作为输入。上述问题是 有点笼统。有时可能是2.7小时或2.8年或更长时间 5.3周等 我想你需要这样的东西: 但是要小心几个月
public static LocalDateTime changeDate(LocalDateTime date, float time, String unit) {
long newTime;
switch (unit) {
case ("hour"):
newTime = Math.round(time * 60);
date = date.minusMinutes(newTime);// If hours then subtract minutes
break;
case ("day"):
newTime = Math.round(time * 24);
date = date.minusHours(newTime);// If days then subtract hours
break;
case ("week"):
newTime = Math.round(time * 7);
date = date.minusDays(newTime);// If week then subtract days
break;
case ("month"):
newTime = Math.round(time * 30);// here You have to check again
date = date.minusDays(newTime);// If month then subtract days
break;
case ("year"):
newTime = Math.round(time * 12);
date = date.minusMonths(newTime);// If days then subtract months
break;
default:
break;
}
return date;
}
那么:
double years = 2.5;
long months = (long) (years * 12);// 30 month
LocalDateTime ld = LocalDateTime.now();
ld = ld.minusMonths(months);
但请注意,这可能会损失一些时间,例如,如果您有:
years = 2.7
=>years * 12 > 32.400000000000006
因此,您可能会损失0.400000000000006
一个月
因此,如果你绕过它,可能会更有帮助:
long months = Math.round(years * 12);
编辑: 根据您的评论:
实际上我把值和单位都作为输入。上述问题是 有点笼统。有时可能是2.7小时或2.8年或更长时间 5.3周等 我想你需要这样的东西: 但是要小心几个月
public static LocalDateTime changeDate(LocalDateTime date, float time, String unit) {
long newTime;
switch (unit) {
case ("hour"):
newTime = Math.round(time * 60);
date = date.minusMinutes(newTime);// If hours then subtract minutes
break;
case ("day"):
newTime = Math.round(time * 24);
date = date.minusHours(newTime);// If days then subtract hours
break;
case ("week"):
newTime = Math.round(time * 7);
date = date.minusDays(newTime);// If week then subtract days
break;
case ("month"):
newTime = Math.round(time * 30);// here You have to check again
date = date.minusDays(newTime);// If month then subtract days
break;
case ("year"):
newTime = Math.round(time * 12);
date = date.minusMonths(newTime);// If days then subtract months
break;
default:
break;
}
return date;
}
您没有任何内置支持,但您可以通过将
年
值转换为月份(*12
)轻松做到这一点:
如果需要,还可以创建一个util方法:
public static LocalDateTime removeYear(LocalDateTime dateTime, float year) {
int monthToRemove = (int)(year * 12);
return dateTime.minusMonths(monthToRemove);
}
通过以下方式进行测试:
public static void main(String[] args) {
LocalDateTime date = removeYear(LocalDateTime.now(), 2.5F);
System.out.println(date);
}
输出:
2016-01-31T16:33:26.755
请注意,为了使该方法更加稳健,您可以检查
year
是否表示只接受某些类型的值的浮点值,例如小数部分(2.0
)的零或某些小数部分,例如0.5
您没有任何内置支持,但您可以通过将年
值转换为月份(*12
)来轻松做到这一点:
如果需要,还可以创建一个util方法:
public static LocalDateTime removeYear(LocalDateTime dateTime, float year) {
int monthToRemove = (int)(year * 12);
return dateTime.minusMonths(monthToRemove);
}
通过以下方式进行测试:
public static void main(String[] args) {
LocalDateTime date = removeYear(LocalDateTime.now(), 2.5F);
System.out.println(date);
}
输出:
2016-01-31T16:33:26.755
请注意,为了使该方法更加稳健,您可以检查
year
是否表示只接受某些类型的值的浮点值,例如小数部分(2.0
)的零或某些小数部分,例如0.5
使用最小年数(2)。最小月数(6)。@哇:谢谢!我得到这些值作为输入。2.5(2年零6个月)很简单,但如果有人给出2.7或2.8,我觉得手动转换会很麻烦。问题是,你如何区分输入,例如用户输入2.7小时、2.8年或5.3周?@YCF_L:我能理解。我得到了日期、浮点值和单位作为输入,输入时间为年(2)。月(6)。@Wow:谢谢!我得到这些值作为输入。2.5(2年零6个月)很简单,但如果有人给出2.7或2.8,我觉得手动转换会很麻烦。问题是,你如何区分输入,例如用户输入2.7小时、2.8年或5.3周?@YCF_L:我能理解。我得到日期,浮动值和单位作为输入!我得到这些值作为输入。2.5(2年零6个月)很简单,但如果有人给出2.7或2.8,我觉得手动转换会很麻烦。谢谢!我得到这些值作为输入。2.5(2年零6个月)是一个简单的例子,但如果有人给出2.7或2.8,我觉得手动转换会很麻烦。谢谢你的代码!实际上我把值和单位都作为输入。上述问题有点笼统。有时可能是2.7小时、2.8年或5.3周等。@Abhinav您可以相应地处理这些情况,使用minusWeeks、minusHours等函数,我不会为您写出所有内容。几个小时,你必须使用LocalDateTime。谢谢!如果没有其他选择,那么我将为所有人编写类似的代码function@Abhinav是的,我不能再提其他建议了。谢谢你的密码!实际上我把值和单位都作为输入。上述问题有点笼统。有时可能是2.7小时、2.8年或5.3周等。@Abhinav您可以相应地处理这些情况,使用minusWeeks、minusHours等函数,我不会为您写出所有内容。几个小时,你必须使用LocalDateTime。谢谢!如果