如何在我的日期添加分钟

jun*_*idp 99 java calendar date simpledateformat java.util.date

我有这个日期对象:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
Run Code Online (Sandbox Code Playgroud)

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());
Run Code Online (Sandbox Code Playgroud)

newTime改变的价值2011-50-07 17:50 但应该是07-01-2011 17:50.

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

Ara*_*ram 184

问题在于你正在使用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));
Run Code Online (Sandbox Code Playgroud)

  • 那些投票的绅士可以解释为什么? (7认同)

Ali*_*lah 47

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

int addMinuteTime = 5;
Date targetTime = new Date(); //now
targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute
Run Code Online (Sandbox Code Playgroud)


jez*_*nag 32

实现@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;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*tel 18

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

    Calendar now = Calendar.getInstance();
    now.add(Calendar.MINUTE, 10);
    Date teenMinutesFromNow = now.getTime();
Run Code Online (Sandbox Code Playgroud)

在Java 8中,我们有新的API:

    LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES));
    Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
Run Code Online (Sandbox Code Playgroud)


Daw*_*ood 16

这是错误指定的:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Run Code Online (Sandbox Code Playgroud)

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


Bas*_*que 5

TL;博士

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

java.time

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

ISO 8601

默认情况下,java.time类使用标准ISO 8601格式来解析/生成日期时间值的字符串.要使输入字符串符合要求,请使用a替换中间的SPACE T.

String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
Run Code Online (Sandbox Code Playgroud)

LocalDateTime

解析您的输入字符串,LocalDateTime因为它缺少有关时区或从UTC偏移的任何信息.

LocalDateTime ldt = LocalDateTime.parse( inputModified );
Run Code Online (Sandbox Code Playgroud)

加10分钟.

LocalDateTime ldtLater = ldt.plusMinutes( 10 );
Run Code Online (Sandbox Code Playgroud)

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

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

请参阅IdeOne.com中的实时代码.

LocalDateTime有没有时区,所以它并不能代表在时间轴上的一个点.应用时区转换为实际时刻.以(例如),或,或等格式指定正确的时区名称.切勿使用3-4个字母的缩写,如或或因为他们没有真正的时区,不规范,甚至不是唯一的(!).continent/regionAmerica/MontrealAfrica/CasablancaPacific/AucklandAsia/KarachiESTISTPKT

ZonedDateTime

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

ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
Run Code Online (Sandbox Code Playgroud)

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

异常

考虑是否在添加时区之前或之后添加十分钟.由于诸如夏令时(DST)之类的异常会改变挂钟时间,因此可能会得到截然不同的结果.

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

提示:如果您想在时间轴上指定特定时刻,请始终保留时区信息.与输入数据一样,不要丢失该信息.价值12:34是指巴基斯坦的中午还是法国的中午或魁北克的中午?如果你的意思是在巴基斯坦的中午,那么至少包括从UTC(+05:00)的偏移,更好的是,时区的名称(Asia/Karachi).

Instant

如果您想要通过UTC镜头看到相同的时刻,请提取一个Instant.该Instant级表示时间轴上的时刻UTC,分辨率为纳秒(最多9个(9)小数的位数).

Instant instant = zdt.toInstant();
Run Code Online (Sandbox Code Playgroud)

兑换

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

java.util.Date utilDate = java.util.Date.from( instant );
Run Code Online (Sandbox Code Playgroud)

关于java.time

java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.

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

要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.

从哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.