从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(带有时间戳)。