Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从日期开始的本地时间_Java_Date_Localtime - Fatal编程技术网

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.