从date对象中删除时间?

我想从Date对象中删除时间。

 DateFormat df; String date; df = new SimpleDateFormat("dd/MM/yyyy"); d = eventList.get(0).getStartDate(); // I'm getting the date using this method date = df.format(d); // Converting date in "dd/MM/yyyy" format 

但是当我转换这个date(这是在String格式)它也是追加时间。

我根本不想要时间。 我想要的只是“21/03/2012”。

简单的答案是:

不,你不能这样做。 因为那是什么Date使用。

来自javadoc的Date

Date类表示特定的即时时间,毫秒精度。

但是 ,因为这个类只是一个数据对象。 它不关心我们如何描述它。 当我们看到2012/01/01 12:05:10.321的date,我们可以说是2012/01/01 ,这是你需要的。 有很多方法可以做到这一点。

例1:通过操纵string

inputstring:2012/01/20 12:05:10.321

期望的输出string:2012/01/20

由于yyyy / MM / dd正是我们所需要的,我们可以简单地操作string来获得结果。

 String input = "2012/01/20 12:05:10.321"; String output = input.substring(0, 10); // Output : 2012/01/20 

例2:通过SimpleDateFormat

inputstring:2012/01/20 12:05:10.321

期望的输出string:01/20/2012

在这种情况下,我们需要不同的格式。

 String input = "2012/01/20 12:05:10.321"; DateFormat inputFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); Date date = inputFormatter.parse(input); DateFormat outputFormatter = new SimpleDateFormat("MM/dd/yyyy"); String output = outputFormatter.format(date); // Output : 01/20/2012 

要使用SimpleDateFormat ,请检查SimpleDateFormat JavaDoc 。

您可以通过将小时,分,秒和毫秒值设置为零来删除java.util.Date中的时间部分。

 import java.util.Calendar; import java.util.Date; public class DateUtil { 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(); } } 

Apache Commons的DateUtils有一个“截断”的方法,我只是用来做到这一点,我认为这将满足您的需求。 这非常容易使用:

 DateUtils.truncate(dateYouWantToTruncate, Calendar.DAY_OF_MONTH); 

DateUtils也有一些其他很酷的工具,如“isSameDay()”等。 看看吧! 这可能会让你更容易。

那这个呢:

  Date today = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); today = sdf.parse(sdf.format(today)); 

你想要的是不可能的

Date对象表示“绝对”时刻。 你不能“从中删除时间部分”。 使用System.out.println(date)直接打印Date对象时,将始终使用包含时间的默认格式进行格式化。 没有办法改变这一点。

而不是以某种方式尝试使用Date类来devise它不适用的东西,那么应该寻找另一个解决scheme。 例如,使用SimpleDateFormat以您想要的任何格式格式化date。

不幸的是,Javadate和日历API不是标准Java API中devise得最好的类。 有一个叫做Joda-Time的库,它有一个更好更强大的API。

Joda-Time有许多特殊的课程来支持date,时间,周期,持续时间等等。如果你想用一个没有时间的date来工作,那么Joda-Time的LocalDate类就是你要用的。

你可以写,例如:

 private Date TruncarFecha(Date fechaParametro) throws ParseException { String fecha=""; DateFormat outputFormatter = new SimpleDateFormat("MM/dd/yyyy"); fecha =outputFormatter.format(fechaParametro); return outputFormatter.parse(fecha); } 

你可以尝试这样的事情:

 import java.text.*; import java.util.*; public class DtTime { public static void main(String args[]) { String s; Format formatter; Date date = new Date(); formatter = new SimpleDateFormat("dd/MM/yyyy"); s = formatter.format(date); System.out.println(s); } } 

这会给你输出21/03/2012

或者你可以尝试这个,如果你想输出21 Mar, 2012

 import java.text.*; import java.util.*; public class DtTime { public static void main(String args[]) { Date date=new Date(); String df=DateFormat.getDateInstance().format(date); System.out.println(df); } } 
 Date dateWithoutTime = new Date(myDate.getYear(),myDate.getMonth(),myDate.getDate()) 

这是弃用,但最快的方式来做到这一点。

可能是下面的代码可能会帮助那些正在寻找zeroHour的人:

  Date todayDate = new Date(); GregorianCalendar todayDate_G = new GregorianCalendar(); gcd.setTime(currentDate); int _Day = todayDate_GC.get(GregorianCalendar.DAY_OF_MONTH); int _Month = todayDate_GC.get(GregorianCalendar.MONTH); int _Year = todayDate_GC.get(GregorianCalendar.YEAR); GregorianCalendar newDate = new GregorianCalendar(_Year,_Month,_Day,0,0,0); zeroHourDate = newDate.getTime(); long zeroHourDateTime = newDate.getTimeInMillis(); 

希望这会有所帮助。

 String substring(int startIndex, int endIndex) 

换句话说,你知道你的string将是10个字符长,所以你会这样做:

 FinalDate = date.substring(0,9); 

有点模糊,但你可以使用java.sql.Date。 这只存储date部分和基于零的时间(午夜)

 Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, 2011); c.set(Calendar.MONTH, 11); c.set(Calendar.DATE, 5); java.sql.Date d = new java.sql.Date(c.getTimeInMillis()); System.out.println("date is " + d); DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); System.out.println("formatted date is " + df.format(d)); 

 date is 2011-12-05 formatted date is 05/12/2011 

或者它可能是值得创build自己的date对象,只包含date而不是时间。 这可以包装java.util.Date并忽略它的时间部分。

java.util.Date表示date/时间降至毫秒。 你没有select,只能包括一个时间。 您可以尝试清零时间,但是时区和夏令时将起作用 – 并且可能会使事情失败(eg 21/03/2012 0:00 GMT is 20/03/2012 PDT).

你可能想要的只是一个java.sql.Date来表示date部分(尽pipe在内部它仍然使用ms)。

除了@jseals已经说过的。 我认为org.apache.commons.lang.time.DateUtils类可能是你应该看的。

它的方法:truncate(Date date,int field)对我来说工作得很好。

JavaDocs: https ://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html#truncate(java.util.Date,int)

由于您需要截断所有可以使用的时间字段:

 DateUtils.truncate(new Date(),Calendar.DAY_OF_MONTH) 

您也可以根据您的要求手动更改date和格式的/月/格式的时间部分。

  public static Date getZeroTimeDate(Date changeDate){ Date returnDate=new Date(changeDate.getTime()-(24*60*60*1000)); return returnDate; } 

如果返回值不起作用,请检查web.xml中的上下文参数。 例如。

  <context-param> <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name> <param-value>true</param-value> </context-param> 

不要试图用一个简单的方法来做到这一点

date是保存date的string

 String s2=date.substring(0,date.length()-11); 

现在打印s2的值。 它会减less你的string的长度 ,你会得到只有date部分。

另一种解决这个问题的方法是使用java.sql.Date作为sql Date没有时间关联,而java.util.Date总是有一个时间戳。 这里要说的是java.sql.Date扩展java.util.Date,因此java.util.Datevariables可以是对java.sql.Date(不带时间)的引用,也可以是java.util.Date(带有时间戳)。