Java Date对象,该对象获取当前日期,但带有可转换为unix时间的time i控件

Java Date对象,该对象获取当前日期,但带有可转换为unix时间的time i控件,java,date,unix,Java,Date,Unix,我希望能够请求java获取当前日期,然后控制添加到该日期对象的时间,然后将该日期对象转换为unix时间 i、 例如 Calendar today = Calendar.getInstance(); today.set(Calendar.HOUR_OF_DAY, 0); today.set(Calendar.MINUTE, 0); today.set(Calendar.SECOND, 0); today.set(Calendar.MILLISECOND, 0); 然后使用日历对象作为转换字符串执

我希望能够请求java获取当前日期,然后控制添加到该日期对象的时间,然后将该日期对象转换为unix时间

i、 例如

Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);
然后使用
日历
对象作为转换字符串执行此操作

String dateString = "Fri, 09 Nov 2012 23:40:18 GMT"; //but this 
DateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy 
hh:mm:ssz");
Date date = dateFormat.parse(dateString );
long unixTime = (long) date.getTime()/1000;
System.out.println(unixTime );

任何帮助都将不胜感激。

首先,您的日期格式存在一些问题:在解析24小时时间时,您必须使用大写字母
H
长达数小时,我认为时区
z
前面缺少一个空格

使用较新的Java time API,您可以尝试以下方法:

ZonedDateTime.parse("Fri, 09 Nov 2012 23:40:18 GMT", DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z"))
             .with(LocalDate.now())
             .toEpochSecond();
当涉及时区时,新的API非常严格,您可能需要注意这一点。在这个实现中,解析的时间定义了时区(本例中为GMT)。但是您可能想要本地时区(由虚拟机定义)?在这种情况下,您可以将其转换为:
ZonedDateTime.now().with(ZonedDateTime.parse(…).toLocalTime())

在您最初的方法中,为什么不继续使用
日历

Date parsedDate = ...;

Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, parsedDate.getHours());
today.set(Calendar.MINUTE, parsedDate.getMinutes());
today.set(Calendar.SECOND, parsedDate.getSeconds());
today.set(Calendar.MILLISECOND, 0);

long epoch = today.getTimeInMillis() / 1000;

不过,还是要小心时区。

我已经把你的问题读了三遍,但还是不明白,对不起。我似乎缺少了两个代码片段之间的链接。您是说希望今天的unix时间是格林威治标准时间23:40:18(在本例中)?从一个包含不同日期的所需时间的字符串?而不是您的两个
withXx()
调用,
.with(LocalDate.now())
就足够了吗
LocalDate
实现了
TemporalAdjuster
接口。新的日期类和时间类可以通过多种方式组合在一起,这真是太神奇了,不是吗?@OleV.V。当然可以,谢谢!我一直在寻找那种方法,但一定是错过了。。。我想知道为什么已经这么难了。是的,有那么多不同的路线可以满足您的需求,这确实很酷。我不会使用
LocalDateTime
。要获取Unix时间,您需要知道时区,
LocalDateTime
不能包含时区。