我正在尝试将Date实例转换为LocalTime实例。
// Create the Date
Date date = format.parse("2011-02-18 05:00:00.0");
// Convert to Calendar
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// Convert Calendar to LocalTime
Instant instant = Instant.ofEpochMilli(cal.getTimeInMillis());
LocalTime convert = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalTime();我没有得到编译器错误,但是LocalTime实例值是错误的。
我认为它不起作用,因为Date将时间存储在fasttime而不是cdate中。
我正在使用JDK版本1.8。
发布于 2015-04-28 18:49:24
您的输入实际上是一个LocalDateTime。简单地将其解析为LocalDateTime,然后从中获取LocalTime就会简单得多。没有需要担心的时区,也没有一些遗留类(尽可能避免Date和Calendar .)
import java.time.*;
import java.time.format.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S", Locale.US);
String text = "2011-02-18 05:00:00.0";
LocalDateTime localDateTime = LocalDateTime.parse(text, formatter);
LocalTime localTime = localDateTime.toLocalTime();
System.out.println(localTime);
}
}发布于 2016-10-05 09:14:51
这也很简单:
LocalTime time = LocalDateTime.ofInstant(new Date().toInstant(),
ZoneId.systemDefault()).toLocalTime();发布于 2016-10-05 22:47:23
乔恩·斯基特接受答复是正确的。这个答案扩展到了这些想法上。
避免遗留日期-时间类
其他一些答案,以及问题,将旧的遗留日期-时间类与新的类混合在一起。这是不必要的,也是错误的做法。java.time类的全部目的是替换那些麻烦和混乱的旧类。
java.util.Date。java.util.Calendar。LocalDateTime
您的输入字符串缺少有关偏移量-UTC或时区的任何信息。所以我们把它解析为一个LocalDateTime对象。
为了进行解析,我们将中间的空间替换为T,以符合日期时间格式的ISO 8601标准。
String input = "2011-02-18 05:00:00.0".replace( " " , "T" );
LocalDateTime ldt = LocalDateTime.parse( input );LocalTime
要专注于一天中没有日期的时间,就要求一个LocalTime。
LocalTime lt = ldt.toLocalTime();ZonedDateTime
请注意,所有这些都不是实际的时刻,不是时间线上的一个点。如果没有世界协调时或时区的抵消,我们不知道你指的是新西兰奥克兰的早上5点,加尔各答的5点,法国的巴黎5点,或魁北克蒙特勒亚州的5点。每一个时刻都将是非常不同的时刻。
如果您确实知道特定的预期时区,请应用它。应用ZoneId来获得ZonedDateTime。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ldt.atZone( z );从那里开始,如果需要的话,请请求LocalTime。
LocalTime lt = zdt.toLocalTime(); Instant
如果您想在UTC中看到相同的时刻,请提取一个Instant。Instant类以UTC表示时间线上的一个时刻,分辨率为纳秒 (小数的9 (9)位)。
通常最好在大部分业务逻辑、日志记录、数据存储和数据交换中关注UTC。学会把UTC看作是“一个真正的时间”。
Instant instant = zdt.toInstant(); // Same moment, shifted to UTC.https://stackoverflow.com/questions/29927362
复制相似问题