换句话说,我想要提供Joda-Time的功能:
today = today.withTime(0, 0, 0, 0);
但没有Joda-Time,只有java.util.Date。
不推荐使用.setHours()等方法。还有更正确的方法吗?
答案 0 :(得分:54)
Date today = new Date();
today.setHours(0); //same for minutes and seconds
由于不推荐使用这些方法,您可以使用Calendar
:
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0); // same for minutes and seconds
如果您最后需要Date
个对象,只需致电today.getTime()
答案 1 :(得分:12)
Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
来自Apache Commons-Lang的DateUtils。注意时区!
答案 2 :(得分:8)
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));
找到here
答案 3 :(得分:8)
还有更正确的方法吗?
是的,有。
LocalDate.now(
ZoneId.of( "America/Montreal" )
).atStartOfDay(
ZoneId.of( "America/Montreal" )
)
Java 8及更高版本现在内置了新的java.time框架。见Tutorial。灵感来自Joda-Time,由JSR 310定义,并由ThreeTen-Extra项目扩展。
以下是一些示例,使用java.time。请注意它们如何指定时区。如果省略,则为JVM的当前默认时区。该默认值可能会有所不同,甚至在运行时期间随时更改,因此我建议您明确指定时区,而不是隐式依赖默认值。
以下是仅限日期的示例,没有时间或时区。
ZoneId zonedId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zonedId );
System.out.println( "today : " + today );
今天:2015-10-19
以下是获取当前日期时间的示例。
ZoneId zonedId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( zonedId );
System.out.println( "zdt : " + zdt );
运行时:
zdt:2015-10-19T18:07:02.910-04:00 [美国/蒙特利尔]
问题要求时间设置为零的日期时间。这假设一天中的第一个时刻始终是时间00:00:00.0
,但情况并非总是如此。夏令时(DST)和其他异常意味着这一天可能会在01:00.0
等不同时间开始。
幸运的是,java.time可以确定适合特定时区{0}的一天中的第一时刻。让我们使用上面代码中名为LocalDate
的{{1}}和today
ZoneId
来查看一些代码。
zoneId
zdt:2015-10-19T00:00:00-04:00 [美国/蒙特利尔]
如果必须有一个java.util.Date用于尚未更新的类以使用java.time类型,请转换。调用LocalDate::atStartOfDay
方法。
ZonedDateTime todayStart = today.atStartOfDay( zoneId );
java.util.Date.from( Instant instant )
框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacy,java.util.Date
和& Calendar
现在位于SimpleDateFormat
的Joda-Time项目建议迁移到maintenance mode类。
要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial。
您可以直接与数据库交换 java.time 对象。使用符合JSR 310或更高版本的JDBC driver。不需要字符串,不需要java.util.Date date = java.util.Date.from( zdt.toInstant() );
类。
从哪里获取java.time类?
How to use ThreeTenABP…项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如ThreeTen-Extra,Interval
,YearWeek
和YearQuarter
。
答案 4 :(得分:6)
如果您想要当前日期的午夜(0:00 am),您可以使用默认构造函数并将时间部分清零:
Date today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0);
修改:使用Calendar
进行更新,因为这些方法已弃用
Calendar today = Calendar.getInstance();
today.clear(Calendar.HOUR); today.clear(Calendar.MINUTE); today.clear(Calendar.SECOND);
Date todayDate = today.getTime();
答案 5 :(得分:1)
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.util.Calendar;
import java.util.Date;
/**
* * Java Program to get current day, month, year, and dayOfweek in both Java 8
* * and before e.g. JDK 1.6 and JDK 1.7
*/
/**
* @author AJMAL SHA
*
*/
public class Test {
public static void main(String[] args) { // Before Java 8
Date today = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(today); // don't forget this if date is arbitrary
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 1 being Sunday
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
int month = cal.get(Calendar.MONTH); // 0 being January
int year = cal.get(Calendar.YEAR);
System.out.println("current date : " + today);
System.out.println("dayOfWeek from date in Java 6 : " + dayOfWeek);
System.out.println("dayOfMonth from a date in Java 7 : " + dayOfMonth);
System.out.println("dayOfYear from a date in Java 1.6 : " + dayOfYear);
System.out.println("month from a date in Java 1.7 : " + month);
System.out.println("year from date in JDK 6 : " + year); // In Java 8
LocalDate currentDate = LocalDate.now();
DayOfWeek dow = currentDate.getDayOfWeek();
int dom = currentDate.getDayOfMonth();
int doy = currentDate.getDayOfYear();
Month m = currentDate.getMonth();
int y = currentDate.getYear();
System.out.println("current local date : " + currentDate);
System.out.println("dayOfWeek from a date in Java 8 : " + dow);
System.out.println("dayOfMonth from date in JDK 8: " + dom);
System.out.println("dayOfYear from a date in Java SE 8 : " + doy);
System.out.println("month from a date in Java 1.8 : " + m);
System.out.println("year from date in JDK 1.8 : " + y);
}
}
<强> 输出.. 强>
current date : Sun Feb 19 06:38:16 PST 2017
dayOfWeek from date in Java 6 : 1
dayOfMonth from a date in Java 7 : 19
dayOfYear from a date in Java 1.6 : 50
month from a date in Java 1.7 : 1
year from date in JDK 6 : 2017
current local date : 2017-02-19
dayOfWeek from a date in Java 8 : SUNDAY
dayOfMonth from date in JDK 8: 19
dayOfYear from a date in Java SE 8 : 50
month from a date in Java 1.8 : FEBRUARY
year from date in JDK 1.8 : 2017
答案 6 :(得分:0)
使用此代码;
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
这将显示为:
2013年2月5日下午12:39:02
答案 7 :(得分:0)
使用此代码可轻松获取日期和时间:
package date.time;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTime {
public static void main(String[] args) {
SimpleDateFormat dnt = new SimpleDateFormat("dd/MM/yy :: HH:mm:ss");
Date date = new Date();
System.out.println("Today Date & Time at Now :"+dnt.format(date));
}
}
答案 8 :(得分:0)
以任何特定格式获取今天日期的代码
您可以在SimpleDateFormat实例中定义所需的格式,以获取该特定格式的日期
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
String todaysdate = dateFormat.format(date);
System.out.println("Today's date : " + todaysdate);
点击下面的链接以查看有效的日期格式组合。
https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
代码:要从今天的日期提前x天或以前,要获得过去的日期或将来的日期。
例如:
今天日期:2018/11/27
xdayFromTodaysDate = 2获取日期为11/29/2018
xdayFromTodaysDate = -2获取日期为11/25/2018
public String getAniversaryDate(int xdayFromTodaysDate ){
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH,xdayFromTodaysDate);
date = cal.getTime();
String aniversaryDate = dateFormat.format(date);
LOGGER.info("Today's date : " + todaysdate);
return aniversaryDate;
}
CODE:从给定日期提前x天或以前的日期
public String getAniversaryDate(String givendate, int xdayFromTodaysDate ){
Calendar cal = Calendar.getInstance();
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
try {
Date date = dateFormat.parse(givendate);
cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH,xdayFromTodaysDate);
date = cal.getTime();
String aniversaryDate = dateFormat.format(date);
LOGGER.info("aniversaryDate : " + aniversaryDate);
return aniversaryDate;
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}