如何将分钟添加到我的date

我有这个date对象:

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

现在我正在尝试在上面的date添加10分钟。

 Calendar cal = Calendar.getInstance(); cal.setTime(d1); cal.add(Calendar.MINUTE, 10); String newTime = df.format(cal.getTime()); 

新时间的价值改变2011-50-07 17:50但应该是07-01-2011 17:50

它正确添加分钟,但它也改变了一个月,不知道为什么!

这个问题是你正在使用mm 。 你应该使用MMMM是月份, mm是分钟。 试试用yyyy-MM-dd HH:mm

其他方法:

它可以像这样简单(其他select是使用乔达时间 )

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

实现@ 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; } 

你可以在org.apache.commons.lang3.time包中使用DateUtils类

 int addMinuteTime = 5; Date targetTime = new Date(); //now targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute 

这是不正确的指定:

 SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm"); 

您使用的是分钟而不是月份(MM)

为了避免任何依赖,你可以使用java.util.Calendar如下:

  Calendar now = Calendar.getInstance(); now.add(Calendar.MINUTE, 10); Date teenMinutesFromNow = now.getTime(); 

你的SimpleDateFormat模式有一个错误。 它应该是

 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 

使用这种格式,

 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 

毫米分钟和毫米为mounth

TL;博士

 LocalDateTime.parse( "2016-01-23 12:34".replace( " " , "T" ) ) .atZone( ZoneId.of( "Asia/Karachi" ) ) .plusMinutes( 10 ) 

java.time

使用优秀的java.time类进行date时间的工作。 这些类取代了麻烦的旧date时间类,如java.util.Datejava.util.Calendar

ISO 8601

java.time类默认使用标准的ISO 8601格式来parsing/生成date时间值的string。 为了使inputstring符合,用Treplace中间的空格。

 String input = "2016-01-23 12:34" ; String inputModified = input.replace( " " , "T" ); 

LocalDateTime

parsing您的inputstring为LocalDateTime因为它缺less关于时区或偏离UTC的任何信息。

 LocalDateTime ldt = LocalDateTime.parse( inputModified ); 

加十分钟。

 LocalDateTime ldtLater = ldt.plusMinutes( 10 ); 

ldt.toString():2016-01-23T12:34

ldtLater.toString():2016-01-23T12:44

在IdeOne.com中查看实时代码 。

LocalDateTime没有时区,所以它不代表时间轴上的一个点。 将时区应用于实际时刻。 以America/MontrealAfrica/CasablancaPacific/AucklandAsia/Karachicontinent/region格式指定适当的时区名称 。 切勿使用3-4字母缩写(如ESTISTPKT因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZonedDateTime

如果您知道此值的预期时区,请应用ZoneId以获取ZonedDateTime

 ZoneId z = ZoneId.of( "Asia/Karachi" ); ZonedDateTime zdt = ldt.atZone( z ); 

zdt.toString():2016-01-23T12:44 + 05:00 [亚洲/卡拉奇]

exception

考虑是否在添加时区之前或之后添加十分钟。 由于夏令时间(DST)等exception情况的改变,您可能会得到一个截然不同的结果,这会改变挂钟时间 。

是否应该在添加区域之前或之后添加10分钟取决于业务场景和规则的含义。

提示:当您打算在时间线上的特定时刻时,请始终保留时区信息 。 不要像input数据那样丢失这些信息。 价值12:34是巴基斯坦中午还是法国中午,还是魁北克中午呢? 如果你的意思是巴基斯坦的中午,那至less要包括UTC的偏移量( +05:00 ),还有更好的时区名称( Asia/Karachi )。

Instant

如果你想通过UTC的镜头看到同样的时刻,请提取InstantInstant类表示UTC时间轴上的一个时刻,分辨率为纳秒 (最多九(9)位小数)。

 Instant instant = zdt.toInstant(); 

兑换

尽可能避免麻烦的旧date时间类。 但是,如果你必须,你可以转换。 调用添加到旧类的新方法。

 java.util.Date utilDate = java.util.Date.from( instant ); 

关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的遗留date时间类,如java.util.DateCalendarSimpleDateFormat

Joda-Time项目现在处于维护模式 ,build议迁移到java.time。

要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。

从何处获取java.time类?

  • Java SE 8SE 9及更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6SE 7
    • 大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。
  • Android的
    • ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。
    • 请参阅如何使用…。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如IntervalYearWeekYearQuarter 等等 。

一旦你parsing了date,我使用这个工具函数来添加小时,分钟或秒钟:

 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小时(夏令时型调整,闰秒等),build议使用Calendar

为我工作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) 

只要有兴趣的人 我正在开发一个需要类似function的iOS项目,所以我结束了@jeznag的快速移植

 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 }