java 加分钟_java - 如何在我的D中添加分钟

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值