java - 如何在我的D中添加分钟
我有这个日期对象:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
d1的值是Fri Jan 07 17:40:00 PKT 2011
现在我想在上面的日期添加10分钟。
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
值newTime更改为2011-50-07 17:50但它应该是07-01-2011 17:50。
它正确地添加了分钟,但也改变了月份,不知道为什么!
11个解决方案
172 votes
问题在于您使用的是mm.您应该使用MM. MM用于月份,mm用于分钟。 试试yyyy-MM-dd HH:mm
其他方法:
它可以这么简单(其他选项是使用joda-time)
static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs
Calendar date = Calendar.getInstance();
long t= date.getTimeInMillis();
Date afterAddingTenMins=new Date(t + (10 * ONE_MINUTE_IN_MILLIS));
Aravind R. Yarram answered 2019-08-21T17:50:05Z
37 votes
您可以在org.apache.commons.lang3.time包中使用DateUtils类
int addMinuteTime = 5;
Date targetTime = new Date(); //now
targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute
Alireza Alallah answered 2019-08-21T17:50:32Z
31 votes
实现@ Pangea的答案的便捷方法:
/*
* Convenience method to add a specified number of minutes to a Date object
* From: http://stackoverflow.com/questions/9043981/how-to-add-minutes-to-my-date
* @param minutes The number of minutes to add
* @param beforeTime The time that will have minutes added to it
* @return A date object with the specified number of minutes added to it
*/
private static Date addMinutesToDate(int minutes, Date beforeTime){
final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs
long curTimeInMs = beforeTime.getTime();
Date afterAddingMins = new Date(curTimeInMs + (minutes * ONE_MINUTE_IN_MILLIS));
return afterAddingMins;
}
jeznag answered 2019-08-21T17:50:57Z
16 votes
这是错误指定的:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
您使用分钟而不是月份(MM)
Dawood answered 2019-08-21T17:51:31Z
15 votes
为了避免任何依赖,您可以使用java.util.Calendar,如下所示:
Calendar now = Calendar.getInstance();
now.add(Calendar.MINUTE, 10);
Date teenMinutesFromNow = now.getTime();
在Java 8中,我们有新的API:
LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES));
Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
Marco Montel answered 2019-08-21T17:52:06Z
5 votes
TL;博士
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
java.time
使用优秀的java.time类进行日期工作。 这些类取代了麻烦的旧日期时间类,如YearQuarter和+05:00。
ISO 8601
默认情况下,java.time类使用标准ISO 8601格式来解析/生成日期时间值的字符串。 要使输入字符串符合要求,请使用YearQuarter替换中间的SPACE。
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
YearQuarter
将输入字符串解析为YearQuarter,因为它缺少有关时区或从UTC偏移的任何信息。
LocalDateTime ldt = LocalDateTime.parse( inputModified );
加10分钟。
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toString():2016-01-23T12:34
ldtLater.toString():2016-01-23T12:44
请参阅IdeOne.com中的实时代码。
那个YearQuarter没有时区,所以它不代表时间轴上的一个点。 应用时区转换为实际时刻。 指定适当的时区名称,格式为+05:00,例如YearQuarter,YearQuarter或Asia/Karachi或YearQuarter。切勿使用3-4字母缩写,例如EST或IST或PKT,因为它们不是真正的时区,不是标准化的, 甚至不是唯一的(!)。
YearQuarter
如果您知道此值的预期时区,请应用YearQuarter以获取+05:00。
ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString():2016-01-23T12:44 + 05:00 [亚洲/卡拉奇]
异常
考虑是否在添加时区之前或之后添加十分钟。 由于诸如夏令时(DST)之类的异常会改变挂钟时间,因此可能会得到截然不同的结果。
是否应在添加区域之前或之后添加10分钟取决于业务场景和规则的含义。
提示:如果您想在时间轴上指定特定时刻,请始终保留时区信息。 与输入数据一样,不要丢失该信息。 YearQuarter的价值是巴基斯坦的中午还是法国的中午或魁北克的中午? 如果你的意思是在巴基斯坦的中午,请至少包括从UTC(+05:00)的偏移,更好的是,时区的名称(Asia/Karachi)。
YearQuarter
如果您想要通过UTC镜头看到的相同时刻,请提取YearQuarter. YearQuarter类表示UTC时间轴上的一个时刻,分辨率为纳秒(最多九(9)位小数)。
Instant instant = zdt.toInstant();
兑换
尽可能避免使用麻烦的旧日期时间类。 但如果你必须,你可以转换。 调用添加到旧类的新方法。
java.util.Date utilDate = java.util.Date.from( instant );
关于java.time
java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,例如YearQuarter,YearQuarter,&YearQuarter。
现在处于维护模式的Joda-Time项目建议迁移到java.time。
要了解更多信息,请参阅Oracle教程。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310。
从哪里获取java.time类?
Java SE 8和SE 9及更高版本内置。
带有捆绑实现的标准Java API的一部分。
Java 9增加了一些小功能和修复。
Java SE 6和SE 7许多java.time功能都被反向移植到Java 6& 7在ThreeTen-Backport。
Android的ThreeTenABP项目特别适用于Android的ThreeTen-Backport(如上所述)。
请参阅如何使用....
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的类,例如YearQuarter,YearQuarter,YearQuarter等。
Basil Bourque answered 2019-08-21T17:55:17Z
4 votes
SimpleDateFormat的模式中存在错误。 它应该是
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Baldrick answered 2019-08-21T17:55:45Z
4 votes
使用这种格式,
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
分钟为mm,月份为MM
Kushan answered 2019-08-21T17:56:19Z
2 votes
解析完日期后,我使用此实用程序功能添加小时,分钟或秒:
public class DateTimeUtils {
private static final long ONE_HOUR_IN_MS = 3600000;
private static final long ONE_MIN_IN_MS = 60000;
private static final long ONE_SEC_IN_MS = 1000;
public static Date sumTimeToDate(Date date, int hours, int mins, int secs) {
long hoursToAddInMs = hours * ONE_HOUR_IN_MS;
long minsToAddInMs = mins * ONE_MIN_IN_MS;
long secsToAddInMs = secs * ONE_SEC_IN_MS;
return new Date(date.getTime() + hoursToAddInMs + minsToAddInMs + secsToAddInMs);
}
}
添加很长一段时间时要小心,1天不总是24小时(夏令时型调整,闰秒等),建议Calendar。
David Miguel answered 2019-08-21T17:56:54Z
0 votes
为我工作DateUtils
//import
import org.apache.commons.lang.time.DateUtils
...
//Added and removed minutes to increase current range dates
Date horaInicialCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaInicial.getTime()),-1)
Date horaFinalCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaFinal.getTime()),1)
Samuel Ivan answered 2019-08-21T17:57:23Z
-2 votes
只是对任何有兴趣的人。 我正在开发一个需要类似功能的iOS项目,所以我最终将@jeznag的答案移植到了swift
private func addMinutesToDate(minutes: Int, beforeDate: NSDate) -> NSDate {
var SIXTY_SECONDS = 60
var m = (Double) (minutes * SIXTY_SECONDS)
var c = beforeDate.timeIntervalSince1970 + m
var newDate = NSDate(timeIntervalSince1970: c)
return newDate
}
tawheed answered 2019-08-21T17:57:52Z