我正在尝试将startDate的时间设置为 00:00:00 ,将endDate的时间设置为 23:59:59 ,但是在调试startDate的时间是 8月4日09 10:30:00 IST 2018 ,并且endDate的时间是星期二8月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);
提供日期和日期的字符串是日期为 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);
答案 0 :(得分:1)
LocalDate
.of( 2018 , Month.MAY , 23 )
.atStartOfDay(
ZoneId.of( "America/New_York" )
)
永远不要使用可怕的旧式旧式日期时间类,例如Date
。
使用现代的 java.time 类。
ZoneId z = ZoneId.of( "America/New_York" ) ;
LocalDate ld = LocalDate.of( 2018 , Month.MAY , 23 ) ;
ZonedDateTime zdtStart = ld.atStartOfDay( z ) ;
在跟踪一整天时,请勿试图确定最后一刻。我们通常使用Half-Open方法定义时间范围,其中开始是包含在内的,而结尾是排斥的。因此,一天从第一时刻开始(通常在00:00,但并非总是如此),一直持续到但不包括第二天的第一时刻。
LocalDate dayAfter = ld.plusDays( 1 ) ;
ZonedDateTime zdtStop = dayAfter.atStartOfDay( z ) ;
提示:将ThreeTen-Extra库添加到您的项目中以访问Interval
类。
org.threeten.extra.Interval interval =
Interval.of(
zdtStart.toInstant() ,
zdtStop.toInstant()
)
;
该类包含方便的比较方法,例如abuts
,contains
,encloses
,intersection
等。
boolean containsMoment = interval.contains( Instant.now() ) ;
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
答案 1 :(得分:0)
如果需要IST计时,只需将EST从EST更改为IST 2:
estFormat.setTimeZone(TimeZone.getTimeZone("IST"));