Java 从日期开始的本地时间
我正在尝试将Java 从日期开始的本地时间,java,date,localtime,Java,Date,Localtime,我正在尝试将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.ofEpoch
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版。您的输入实际上是一个
LocalDateTime
。简单地将其解析为LocalDateTime
,然后从中获取LocalTime
,会简单得多。没有需要担心的时区,没有多少遗留类(尽可能避免Date
和Calendar
)
试试这个 String datestring = "2011-02-18 05:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//take a look at MM
Date date = dt.parse(datestring );
Instant instant = Instant.ofEpochMilli(date.getTime());
LocalTime res = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalTime();
这也很简单:
LocalTime time = LocalDateTime.ofInstant(new Date().toInstant(),
ZoneId.systemDefault()).toLocalTime();
答案是正确的。这个答案扩展了这些想法
避免遗留日期时间类
其他一些答案和问题将旧的遗留日期时间类与新的日期时间类混合在一起。这是不必要的坏习惯。这些类的全部目的是替换那些麻烦和混乱的旧类
- 您不需要
李>java.util.Date
- 您不需要
java.util.Calendar
LocalDateTime
您的输入字符串缺少有关UTC或时区偏移量的任何信息。所以我们将它解析为一个对象
解析时,用“<代码> t>代码>替换中间的空间,以符合日期时间格式的标准。
String input = "2011-02-18 05:00:00.0".replace( " " , "T" );
LocalDateTime ldt = LocalDateTime.parse( input );
LocalTime
要想专注于一天中没有日期的时间,请询问一个问题
ZoneDateTime
请注意,这些都不是实际的时刻,也不是时间线上的一点。如果没有UTC或时区的偏移,我们不知道您指的是新西兰奥克兰上午5点、加尔各答上午5点、法国巴黎上午5点还是魁北克山上午5点。每一个时刻都会是非常不同的时刻
如果根据上下文您确实知道预期时区,请应用它。申请一份工作以获得一份工作
如果需要,从那里询问LocalTime
LocalTime lt = zdt.toLocalTime();
Instant
如果您想在中看到相同的时刻,请提取一个瞬间
。该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)
一般来说,最好将重点放在业务逻辑、日志记录、数据存储和数据交换方面。学会将UTC视为“唯一的真实时间”
Instant instant = zdt.toInstant(); // Same moment, shifted to UTC.
首先,我们谈论的是什么版本的Java?@RafaelR.S.Robles JDK 1.8将麻烦的旧类与Java.time类混合在一起是愚蠢的。旧类现在被java.time类取代。不需要旧的。如果你必须使用旧的类和新的类,那么你会怎么做?重构任何代码库以适应新类?这毫无意义。有时需要将旧样式与新样式一起使用,这适用于任何开发工作,而不仅仅是Java。可以使用LocalTime.ofInstant()简化
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ldt.atZone( z );
LocalTime lt = zdt.toLocalTime();
Instant instant = zdt.toInstant(); // Same moment, shifted to UTC.