如何将分钟添加到我的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
。 你应该使用MM
。 MM
是月份, 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.Date
和java.util.Calendar
。
ISO 8601
java.time类默认使用标准的ISO 8601格式来parsing/生成date时间值的string。 为了使inputstring符合,用T
replace中间的空格。
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/Montreal
, Africa/Casablanca
, Pacific/Auckland
, Asia/Karachi
等continent/region
格式指定适当的时区名称 。 切勿使用3-4字母缩写(如EST
或IST
或PKT
因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
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的镜头看到同样的时刻,请提取Instant
。 Instant
类表示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.Date
, Calendar
和SimpleDateFormat
。
Joda-Time项目现在处于维护模式 ,build议迁移到java.time。
要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。
从何处获取java.time类?
- Java SE 8和SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和SE 7
- 大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。
- Android的
- ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。
- 请参阅如何使用…。
ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如Interval
, YearWeek
, YearQuarter
等等 。
一旦你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 }