【发布时间】:2018-10-16 04:42:10
【问题描述】:
我试图将 startDate 的时间传递为 00:00:00 并将 endDate 的时间传递为 23:59:59 但在调试期间 startDate 的时间是 8 月星期四09 10:30:00 IST 2018 和 endDate 的时间是 Tue Aug 14 10:29:59 IST 2018。我哪里做错了?
SimpleDateFormat estFormat=new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
estFormat.setTimeZone(TimeZone.getTimeZone("EST"));
Date startDate=estFormat.parse(sdate+" 00:00:00");
object.setStartDate(startDate);
Date endDate=estFormat.parse(edate+" 23:59:59");
object.setEndDate(endDate);
如果 sdate 和 edate 是具有 MM/dd/yyyy 格式的日期的字符串。
解决方案:使用 JAVA-TIME API
sdate=sdate.trim()+" 00:00:00";
edate=edate.trim()+" 23:59:59";
DateTimeFormatter df = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
LocalDateTime localdatetime = LocalDateTime.parse(sdate,df);
Date startDate = Date.from(localdatetime.atZone(ZoneId.of("America/New_York" )).toInstant());
object.setStartDate(startDate);
localdatetime = LocalDateTime.parse(edate,df);
Date endDate = Date.from(localdatetime.atZone(ZoneId.of("America/New_York" )).toInstant());
object.setEndDate(endDate);
【问题讨论】:
-
没有问题,您得到了您要求的美国东部时间。您看到的是当您 打印 值时转换为印度时间的时间。这是输出的格式问题。内存中的值是正确的。请记住,
java.util.Date没有时区,内部存储为 UTC。解析和格式化值时应用时区转换。 -
我建议你避免使用
SimpleDateFormat类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。 -
那么说明代码中传递的日期是正确的吗?并会产生正确的输出?@Andreas
-
好的,我会试试joda time,如果我遇到任何错误,我会在这里发布..@OleV.V.
-
只是为了防止您误读,我说的是 java.time,而不是 Joda-Time。 Joda-Time 已经向前迈进了一步,但处于维护模式。 java.time 是相关的,是两者中更现代的一种。
标签: java date debugging time simpledateformat