【发布时间】:2016-11-29 19:48:35
【问题描述】:
使用 JDK 1.8 我有一天的时间(不是自 1970 年以来),我有一个日期,如何添加两者并创建一个日期时间。
谢谢 尝试过@Kikos soln 不会产生正确的结果: 在这种情况下,我的原始时间 930 小时以某种方式更改为 9:40,原始日期本身不应该有任何时间获取时间(??) - 所以加法数学失败。
String testdate = "2015/10/25";
Date date = new SimpleDateFormat("yyyy/mm/dd").parse(testdate);
String timehrs= "930";
long ltime = Long.parseLong("930");
long hoursAsSeconds = (ltime / 100) * 60 * 60;
long minsAsSeconds = (ltime % 100) * 60;
long secondsOfDay = hoursAsSeconds + minsAsSeconds;
System.out.println("testdate : "+ testdate +", timehrs: "+timehrs+" ,secondsOfDay: "+secondsOfDay);
System.out.println("Orig Date time formatted: "+ new SimpleDateFormat("yyyy-mm-dd hh:mm:ss").format(date));
Date dt = new Date(date.getTime() + secondsOfDay*1000);
System.out.println("New Date : "+ new SimpleDateFormat("yyyy-mm-dd hh:mm:ss").format(dt);
testdate : 2015/10/25, timehrs: 930, secondsOfDay: 34200
原始日期时间格式:2015-10-25 12:10:00
新日期:2015-40-25 09:40:00
预计:2015-10-25 09:30:00
-
基于@Basil Bourque 的以下内容
long nanosOfDay = TimeUnit.MILLISECONDS.toNanos( secondsOfDay*1000 );
LocalTime lt = LocalTime.ofNanoOfDay( nanosOfDay ); ZoneId z = ZoneId.systemDefault(); ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z );System.out.println("ZonedDateTime zdt: "+ zdt);
ZonedDateTime zdt: 2015-10-25T09:30-07:00[America/Los_Angeles]
这是正确答案:2015-10-25T09:30
【问题讨论】:
-
请提供代码示例。请输入示例输入和预期输出。
-
不清楚你有什么。当您说“日期”时,您是指
java.util.Date吗?或者只是“约会”,如果那是什么? 一天的时间以毫秒为单位是什么意思? -
Date已经过时了,应该尽可能避免使用。使用 Java 8 类,例如 LocalDate、LocalTime、LocalDateTime、Instant、DateTimeFormatter、.... -
我的日期只是一个 java.util.Date 从字符串创建(根据代码)。字符串没有时间组件,但是当我转换和格式化并看到它有时间时。我的时间也只是一天中的毫秒时间(不是自 1970 年以来)。