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 - Fatal编程技术网

Java 根据年、月、日和时间创建日期对象

Java 根据年、月、日和时间创建日期对象,java,date,Java,Date,是否可以从年、月、日和时间创建java.util.Date对象 我正在使用以下代码: private Date convertToDate(LocalTime time) { @SuppressWarnings("deprecation") Instant instant = time.atDate(LocalDate.of(date.getYear(), date.getMonth(), date.getDay())).atZone(ZoneId.syst

是否可以从年、月、日和时间创建
java.util.Date
对象

我正在使用以下代码:

private Date convertToDate(LocalTime time)
{
    @SuppressWarnings("deprecation")
    Instant instant = time.atDate(LocalDate.of(date.getYear(),
           date.getMonth(), date.getDay())).atZone(ZoneId.systemDefault()).toInstant();
    return Date.from(instant);
}
我面临的问题是,这段代码总是给我的时间增加6分32秒。

因此,如果我的
LocalTime时间
是例如
08:00
则创建日期是
Mon-Sep 03 08:06:32 CET 115

您可以尝试使用Calendar类

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
Date date = calendar.getTime();

您可以尝试使用Calendar类

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.YEAR, year);
Date date = calendar.getTime();
您使用错误:

返回一个值,该值是从年份中减去1900的结果 包含或开始于由该符号表示的时间瞬间的 日期对象,在本地时区中解释

getYear()
的偏移量为1900,使用
LocalDate.of(年、月、日)
时必须添加该偏移量。这就是为什么你计算的瞬间的年份是115

Instant instant = time.atDate(LocalDate.of(date.getYear() + 1900,
       date.getMonth(), date.getDay())).atZone(ZoneId.systemDefault()).toInstant();
您使用错误:

返回一个值,该值是从年份中减去1900的结果 包含或开始于由该符号表示的时间瞬间的 日期对象,在本地时区中解释

getYear()
的偏移量为1900,使用
LocalDate.of(年、月、日)
时必须添加该偏移量。这就是为什么你计算的瞬间的年份是115

Instant instant = time.atDate(LocalDate.of(date.getYear() + 1900,
       date.getMonth(), date.getDay())).atZone(ZoneId.systemDefault()).toInstant();

如果要设置日期和时间,请使用
LocalDateTime

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.concurrent.TimeUnit;

public class Example {
    public static void main(String[] args) {
        long hours = TimeUnit.MILLISECONDS.convert(18, TimeUnit.HOURS);
        long minutes = TimeUnit.MILLISECONDS.convert(30, TimeUnit.MINUTES);
        long seconds = TimeUnit.MILLISECONDS.convert(42, TimeUnit.SECONDS);
        long time = hours + minutes + seconds; // 6:30:42 PM
        Date date = toDate(2015, 10, 13, time);
        DateFormat dateFmt = new SimpleDateFormat("MMM d yyyy  hh:mm:ss a");

        System.out.println(dateFmt.format(date)); // Oct 13 2015  06:30:42 PM
    }

    public static Date toDate(int year, int month, int date, long time) {
        int hour = (int) TimeUnit.MILLISECONDS.toHours(time) % 24;
        int minute = (int) TimeUnit.MILLISECONDS.toMinutes(time) % 60;
        int second = (int) TimeUnit.MILLISECONDS.toSeconds(time) % 60;
        int milli = (int) TimeUnit.MILLISECONDS.toMillis(time);

        return toDate(year, month, date, hour, minute, second, milli);
    }

    public static Date toDate(int year, int month, int date) {
        return toDate(year, month, date, 0);
    }

    public static Date toDate(int year, int month, int date, int hour) {
        return toDate(year, month, date, hour, 0);
    }

    public static Date toDate(int year, int month, int date, int hour, int minute) {
        return toDate(year, month, date, hour, minute, 0);
    }

    public static Date toDate(int year, int month, int date, int hour, int minute, int second) {
        return toDate(year, month, date, hour, minute, second, 0);
    }

    public static Date toDate(int year, int month, int date, int hour, int minute, int second, int milli) {
        return toDate(LocalDateTime.of(year, month, date, hour, minute, second, milli));
    }

    public static Date toDate(LocalDateTime timestamp) {
        return Date.from(timestamp.atZone(ZoneId.systemDefault()).toInstant());
    }
}

如果要设置日期和时间,请使用
LocalDateTime

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.concurrent.TimeUnit;

public class Example {
    public static void main(String[] args) {
        long hours = TimeUnit.MILLISECONDS.convert(18, TimeUnit.HOURS);
        long minutes = TimeUnit.MILLISECONDS.convert(30, TimeUnit.MINUTES);
        long seconds = TimeUnit.MILLISECONDS.convert(42, TimeUnit.SECONDS);
        long time = hours + minutes + seconds; // 6:30:42 PM
        Date date = toDate(2015, 10, 13, time);
        DateFormat dateFmt = new SimpleDateFormat("MMM d yyyy  hh:mm:ss a");

        System.out.println(dateFmt.format(date)); // Oct 13 2015  06:30:42 PM
    }

    public static Date toDate(int year, int month, int date, long time) {
        int hour = (int) TimeUnit.MILLISECONDS.toHours(time) % 24;
        int minute = (int) TimeUnit.MILLISECONDS.toMinutes(time) % 60;
        int second = (int) TimeUnit.MILLISECONDS.toSeconds(time) % 60;
        int milli = (int) TimeUnit.MILLISECONDS.toMillis(time);

        return toDate(year, month, date, hour, minute, second, milli);
    }

    public static Date toDate(int year, int month, int date) {
        return toDate(year, month, date, 0);
    }

    public static Date toDate(int year, int month, int date, int hour) {
        return toDate(year, month, date, hour, 0);
    }

    public static Date toDate(int year, int month, int date, int hour, int minute) {
        return toDate(year, month, date, hour, minute, 0);
    }

    public static Date toDate(int year, int month, int date, int hour, int minute, int second) {
        return toDate(year, month, date, hour, minute, second, 0);
    }

    public static Date toDate(int year, int month, int date, int hour, int minute, int second, int milli) {
        return toDate(LocalDateTime.of(year, month, date, hour, minute, second, milli));
    }

    public static Date toDate(LocalDateTime timestamp) {
        return Date.from(timestamp.atZone(ZoneId.systemDefault()).toInstant());
    }
}

下面是一个替代解决方案,使用一行程序,而不使用不推荐的方法:

return Date.from(date.toInstant()
                     .atZone(ZoneId.systemDefault())
                     .with(time)
                     .toInstant());

下面是一个替代解决方案,使用一行程序,而不使用不推荐的方法:

return Date.from(date.toInstant()
                     .atZone(ZoneId.systemDefault())
                     .with(time)
                     .toInstant());

“date”变量的类型是什么?为什么它不是本地变量?应该是“时间”吗?什么是“日期”?代码的目的是什么,对meThis没有任何意义此方法是时间记录应用程序的一部分,其中日期是类属性的一部分
date
是一个
java.util.date
time
是时间记录中的时间,但我需要它作为
java.util.Date
@Jbartmann请清理您的代码示例,而不是在注释中解释。如果
date
是一个java.util.date,您可以通过将其作为第二个声明参数传递给我们来解释它。在这里发布获取JVM当前默认时区的结果可能有助于解释06:32的奥秘。调用和。日期变量的类型是什么?为什么它不是本地变量?应该是“时间”吗?什么是“日期”?代码的目的是什么,对meThis没有任何意义此方法是时间记录应用程序的一部分,其中日期是类属性的一部分
date
是一个
java.util.date
time
是时间记录中的时间,但我需要它作为
java.util.Date
@Jbartmann请清理您的代码示例,而不是在注释中解释。如果
date
是一个java.util.date,您可以通过将其作为第二个声明参数传递给我们来解释它。在这里发布获取JVM当前默认时区的结果可能有助于解释06:32的奥秘。打电话给我,真的吗?他使用的是本地时间(Java8?),你建议他使用日历?时间在哪里?真的吗?他使用的是本地时间(Java8?),你建议他使用日历?时间在哪里?这解决了我的问题,尽管我不知道为什么。你所做的只是在一年中增加1900,但现在6分32秒已经过去了。谢谢这是因为通过
atZone
LocalDateTime
固定到时间线中的某个瞬间会考虑到可能有一些历史时间调整操作。对于具体的解释,你可以问一个新问题。深入研究正确的程序非常耗时,但我相信会有一些专家这样做;-)这解决了我的问题,尽管我不知道为什么。你所做的只是在一年中增加1900,但现在6分32秒已经过去了。谢谢这是因为通过
atZone
LocalDateTime
固定到时间线中的某个瞬间会考虑到可能有一些历史时间调整操作。对于具体的解释,你可以问一个新问题。深入研究正确的程序非常耗时,但我相信会有一些专家这样做;-)