Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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.util.Date实例的时间设置为00:00:00?_Java_Date - Fatal编程技术网

如何将java.util.Date实例的时间设置为00:00:00?

如何将java.util.Date实例的时间设置为00:00:00?,java,date,Java,Date,我有一个类型为java.util.Date的变量 如何将时间部分设置为00:00:00 我不允许使用Apache Commons库或JodaTime。java.util.Calendar可能是我唯一的选择。要从日期对象中完全删除时间,可以使用以下方法: public static Date removeTime(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date);

我有一个类型为
java.util.Date
的变量

如何将时间部分设置为00:00:00


我不允许使用Apache Commons库或JodaTime。
java.util.Calendar
可能是我唯一的选择。

要从
日期
对象中完全删除时间,可以使用以下方法:

public static Date removeTime(Date date) {    
        Calendar cal = Calendar.getInstance();  
        cal.setTime(date);  
        cal.set(Calendar.HOUR_OF_DAY, 0);  
        cal.set(Calendar.MINUTE, 0);  
        cal.set(Calendar.SECOND, 0);  
        cal.set(Calendar.MILLISECOND, 0);  
        return cal.getTime(); 
    }
将要修改的
Date
对象传递到方法中,它将返回一个没有小时/分钟等的
Date

如果不需要更改日期对象本身,请使用
SimpleDateFormat
。按您想要的方式设置格式,即删除小时/分钟。然后调用format方法并传入要更改的
Date
对象

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy");
System.out.println(sdf.format(yourDate));
tl;博士 如果你的意思是午夜在一个旧的遗留对象

java.util.Date.from(
    OffsetDateTime.of( 
        LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
        LocalTime.MIN ,
        ZoneOffset.UTC
    ).toInstant()
)
OffsetDateTime.of( 
    LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
    LocalTime.MIN ,
    ZoneOffset.UTC
).toInstant()
如果可能的话,放弃上面遗留的
日期
部分,只使用现代或对象

java.util.Date.from(
    OffsetDateTime.of( 
        LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
        LocalTime.MIN ,
        ZoneOffset.UTC
    ).toInstant()
)
OffsetDateTime.of( 
    LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
    LocalTime.MIN ,
    ZoneOffset.UTC
).toInstant()
如果你的意思是午夜而不是UTC

LocalDate.now()
         .atStartOfDay()
与隐式依赖当前默认值相比,最好指定所需/预期的时区

LocalDate.now( ZoneId.of( "Pacific/Auckland" )  )
         .atStartOfDay( ZoneId.of( "Pacific/Auckland" ) )
细节 注意:并非每个时区的每一天都有00:00:00的时间。夏令时可以跳到凌晨1点,省去了午夜

java.time 使用java.time类来取代麻烦的旧式日期时间类,如
java.util.date
日历

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate localDate = LocalDate.now( z );
ZonedDateTime zdt = localDate.atStartOfDay( z );
转换为旧类/从旧类转换 只要可能,您就应该坚持使用现代的java.time类。但是,如果必须有旧遗留类的实例,则可以将java.time转换成java.time或从java.time转换成java.time。查看添加到旧类中的新方法

Calendar myLegacyCal = GregorianCalendar.from( zdt ) ;

Date myLegacyDate = Date.from( zdt.toInstant() ) ;
如果希望始终位于UTC时区的
java.util.Date
具有00:00:00的时间,请使用
OffsetDateTime
和常量
ZoneOffset.UTC

OffsetDateTime odt = OffsetDateTime.of( localDate , LocalTime.MIN , ZoneOffset.UTC ) ;
Date myLegacyDate = Date.from( odt.toInstant() ) ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和


乔达时间 更新:Joda Time项目现在处于维护模式。团队建议迁移到java.time类。这一部分作为历史保留下来

使用2.3,并为此目的使用一种方法:

/©2013巴西尔布尔克。此源代码可以由任何对此承担全部责任的人自由使用。
//导入org.joda.time.*;
DateTime now=新的DateTime();
DateTime firstMomentOfToday=now.withtimeatstartoday();
System.out.println(“now:+now”);
System.out.println(“firstMomentOfToday:+firstMomentOfToday”);
当运行时

现在:2013-12-05T23:00:23.785-08:00
第一个重要日子:2013-12-05T00:00:00.000-08:00

在Java 8中,也可以使用“Java.time.LocalDate.atStartOfDay()”:

    Date date = new Date();
    Instant inst = date.toInstant();
    LocalDate localDate = inst.atZone(ZoneId.systemDefault()).toLocalDate();
    Instant dayInst = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
    Date day = Date.from(dayInst);

与@Sionnach733类似,要从日期中删除时间,可以使用clear为DateTimeUtils编写此函数:

public static Date getDateOnly(final Date input) {
        final Calendar cal = Calendar.getInstance();
        cal.setTime(input);
        cal.clear(Calendar.HOUR_OF_DAY);
        cal.clear(Calendar.MINUTE);
        cal.clear(Calendar.SECOND);
        cal.clear(Calendar.MILLISECOND);
        return cal.getTime();
    }

最新版本由Ole.V.V提供

import java.time.*;

Instant dInst = LocalDate.of(1980, Month.JANUARY, 8).atStartOfDay(ZoneOffset.UTC).toInstant();
long milli = dInst.toEpochMilli();

对不起,我的问题可能不清楚。最后,我想获得一个不带小时、分钟和秒的日期变量。@SIONACH773的解决方案既不包含小时,也不包含分钟或秒。怎么了?@Sionnach733完美@仅供参考,您可以将对象转换为java.util.Date对象(),然后再转换回来。因此,您可以在不干扰其他现有代码的情况下利用Joda时间进行计算。对于这个问题的新读者,我建议您不要使用
Date
。那门课设计得很糟糕,而且早已过时。改为使用中的
LocalDate
from。根据您的具体要求,使用同一API的其他类。在某些时区中,日期没有任何00:00:00。你必须让自己对每天的第一刻感到满意。正确答案。我只想指出,我们通常不会将现代java.time类与麻烦的旧遗留日期时间类(如
date
)混合使用。因此,理想情况下,一旦获得
瞬间
对象,就会停止。只有在绝对必要的情况下才能转换为
Date
,例如与一些尚未更新到java.time的旧代码交互。问题是专门寻找DATE@MaxAlexanderHanna不。重读问题。作者考虑并排除了两个第三方库。最后一句建议使用
Calendar
class。所以我可以安全地假设(a)它们对Java中构建的新类开放,(b)它们只是在无知中操作,还没有通知他们可用的java.tine类。问题是要在java.util.date对象中设置时间,不是吗?@MaxAlexanderHanna我已经向您指出了问题的相关部分,以纯文本形式编写。此外,我们还有数百个Java Date/Calendar类问题,现在已经用Java.time类回答了这些问题,这些类直接取代了Sun、Oracle和JSR社区指导的遗留类。总有一天,唯一负责任的建议就是放弃你的车,使用你车道上的本田。尽管如此,我还是添加了一些措辞和代码示例