java 如何自己设置时间_如何在Java中将时间设置为日期对象

我用Java创建了一个Date对象。 当我这样做时,它显示类似:date=Tue Aug 09 00:00:00 IST 2011。 结果,我的Excel文件似乎减少了一天(27 feb变为26 feb,依此类推),我认为这一定是由于时间的原因。 如何将其设置为下午5:30?

相关:Java日期截止时间信息

Calendar cal = Calendar.getInstance();

cal.set(Calendar.HOUR_OF_DAY,17);

cal.set(Calendar.MINUTE,30);

cal.set(Calendar.SECOND,0);

cal.set(Calendar.MILLISECOND,0);

Date d = cal.getTime();

另请参阅

乔达时间

日历文件

谢谢。 我得到了答案。 我在下面发布了链接。

是手段(日期17:30:0:0)吗?

仅供参考,现在麻烦的日期时间类(例如java.util.Date,java.util.Calendar和java.text.SimpleDateFormat)已成为旧版,由Java 8和更高版本中内置的java.time类取代。

您可以显示用于设置日期对象的代码吗?无论如何

new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2011-01-01 00:00:00")

DateFormat formatter = new SimpleDateFormat(" yyyy-MM-dd"); 日期date =(Date)formatter.parse(st [length]); System.out.print(" date =" + date); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY,17); cal.set(Calendar.MINUTE,30); cal.set(Calendar.SECOND,0); cal.set(Calendar.MILLISECOND,0); 日期= cal.getTime(); System.out.print(" date =" + date);

我将时间设置为下午5:30。

我想贡献现代的答案。这涉及使用现代的Java日期和时间API java.time,而不是旧的Date或Calendar,除非无法避免。

您的问题很可能确实是时区问题。在IST 2011年8月9日星期二00:00:00时,尚未到达IST午夜以西的时区。现在仍然是8月8日。例如,如果您将日期放入Excel的API要求使用UTC,则该日期将是您想要的日期的前一天。我认为真正有效的解决方案是产生一个00:00 UTC的日期时间(或在另一端期望并使用任何时区或偏移量)。

LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);

ZonedDateTime utcDateDime = yourDate.atStartOfDay(ZoneOffset.UTC);

System.out.println(utcDateDime);

此打印

2018-02-27T00:00Z

Z表示UTC(将其视为距UTC或Zulu时区的零偏移量)。当然,更好的是,如果您可以将LocalDate从第一行代码传递到Excel。它不包含时间,因此不会造成混乱。另一方面,如果您需要一个老式的Date对象,则在将Date移交给以下对象之前进行转换:

Date oldfashionedDate = Date.from(utcDateDime.toInstant());

System.out.println(oldfashionedDate);

在我的计算机上打印

Tue Feb 27 01:00:00 CET 2018

别上当了,这是正确的。我的时区(欧洲中部时间)在2月(标准时间)与UTC的时差为+01:00,因此此处的01:00:00等于UTC的00:00:00。只是Date.toString()抓住JVM时区并将其用于生成字符串。

How can I set it to something like 5:30 pm?

为了直接回答您的直接问题,如果您有ZonedDateTime,OffsetDateTime或LocalDateTime,在所有这些情况下,以下将满足您的要求:

yourDateTime = yourDateTime.with(LocalTime.of(17, 30));

如果yourDateTime是2018-02-27T00:00的LocalDateTime,则现在将是2018-02-27T17:30。类似地,对于其他类型,也仅在适当时包括偏移量和时区。

如果您只有日期,如上面的第一个片段中所示,还可以向其中添加日期信息:

LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);

LocalDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30));

对于大多数用途,您应该更喜欢在特定时区中添加日期,例如

ZonedDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30))

.atZone(ZoneId.of("Asia/Kolkata"));

这产生2018-02-27T17:30+05:30[Asia/Kolkata]。

Date和Calendar与java.time

您使用的Date类以及其他答案中使用的Calendar和SimpleDateFormat早已过时,尤其是SimpleDateFormat证明是麻烦的。在所有情况下,现代Java日期和时间API都可以更好地使用。这就是为什么我想为仍在访问的一个老问题提供此答案。

链接:Oracle教程日期时间,说明如何使用java.time。

如果您无权使用Java 8和API java.time,这是我的简单函数,可使用旧的java.util.Calendar(由Jigar Joshi启发)将一个日期的时间复制到另一个日期:

/**

* Copy only the time of one date to the date of another date.

*/

public static Date copyTimeToDate(Date date, Date time) {

Calendar t = Calendar.getInstance();

t.setTime(time);

Calendar c = Calendar.getInstance();

c.setTime(date);

c.set(Calendar.HOUR_OF_DAY, t.get(Calendar.HOUR_OF_DAY));

c.set(Calendar.MINUTE, t.get(Calendar.MINUTE));

c.set(Calendar.SECOND, t.get(Calendar.SECOND));

c.set(Calendar.MILLISECOND, t.get(Calendar.MILLISECOND));

return c.getTime();

}

仅供参考,现在麻烦的日期时间类(例如java.util.Date,java.util.Calendar和java.text.SimpleDateFormat)已成为旧版,由Java 8和更高版本中内置的java.time类取代。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值