Удаление времени из объекта Date? - программирование
Подтвердить что ты не робот

Удаление времени из объекта 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

Но когда я конвертирую эту дату (которая находится в формате String), это также время добавления.

Я не хочу времени. Я хочу просто "21/03/2012".

4b9b3361

Ответ 1

Быстрый ответ:

Нет, вам не разрешено это делать.. Для этого используется Date.

Из javadoc Date:

Класс Date представляет определенный момент времени с точностью до миллисекунды.

Однако, так как этот класс является просто объектом данных. Доза не заботится о том, как мы ее описываем. Когда мы увидим дату 2012/01/01 12:05:10.321, мы можем сказать, что это 2012/01/01, это то, что вам нужно. Существует много способов сделать это.

Пример 1: манипулирование строкой

Входная строка: 2012/01/20 12: 05: 10.321

Желаемая строка вывода: 2012/01/20

Поскольку yyyy/MM/dd - это именно то, что нам нужно, мы можем просто манипулировать строкой, чтобы получить результат.

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

Пример 2: по SimpleDateFormat

Входная строка: 2012/01/20 12: 05: 10.321

Желаемая строка вывода: 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.

Ответ 2

Вы можете удалить временную часть из 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();
    }

}

Ответ 3

Apocal Commons DateUtils имеет метод "усекать" , который я только что использовал для этого, и я думаю, что он удовлетворит ваши потребности. Это действительно легко использовать:

DateUtils.truncate(dateYouWantToTruncate, Calendar.DAY_OF_MONTH);

DateUtils также содержит множество других полезных утилит, таких как "isSameDay()" и тому подобное. Проверьте это! Это может облегчить вам жизнь.

Ответ 4

Как насчет этого:

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

    today = sdf.parse(sdf.format(today));

Ответ 5

Вы хотите невозможно.

Объект

A Date представляет собой "абсолютный" момент времени. Вы не можете "удалить часть времени" из него. Когда вы печатаете объект Date непосредственно с помощью System.out.println(date), он всегда будет отформатирован в формате по умолчанию, который включает время. Вы ничего не можете сделать, чтобы изменить это.

Вместо того, чтобы каким-то образом попытаться использовать класс Date для чего-то, для которого он не был предназначен, вы должны искать другое решение. Например, используйте SimpleDateFormat для форматирования даты в любом формате, который вы хотите.

API дат и календарей Java, к сожалению, не являются наиболее хорошо продуманными классами стандартного Java API. Там есть библиотека под названием Joda-Time, которая имеет гораздо лучший и более мощный API.

Joda-Time имеет ряд специальных классов для поддержки дат, времени, периодов, продолжительности и т.д. Если вы хотите работать с датой без времени, тогда Joda-Time LocalDate класс будет тем, что вы будете использовать.

Ответ 6

Вы можете написать это, например:

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

Ответ 7

вы можете попробовать что-то вроде этого:

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);
    }
}

Ответ 8

Date dateWithoutTime =
    new Date(myDate.getYear(),myDate.getMonth(),myDate.getDate()) 

Это устарело, но самый быстрый способ сделать это.

Ответ 9

Возможно, приведенный ниже код может помочь людям, которые ищут 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();

Надеюсь, это будет полезно.

Ответ 10

String substring(int startIndex, int endIndex)

Другими словами, вы знаете, что ваша строка будет длиной 10 символов, чтобы вы сделали:

FinalDate = date.substring(0,9);

Ответ 11

java.util.Date представляет дату/время до миллисекунды. У вас нет выбора, кроме как включить время с ним. Вы можете попробовать обнулить время, но тогда будут действовать тайм-зоны и летнее время - и это может повредить вещи по линии (e.g. 21/03/2012 0:00 GMT is 20/03/2012 PDT).

Вам может понадобиться java.sql.Date для представления только части даты (хотя внутри она все еще использует ms).

Ответ 12

Немного выдумки, но вы можете использовать java.sql.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

Или, возможно, стоит создать свой собственный объект даты, который просто содержит даты, а не времена. Это может обернуть java.util.Date и игнорировать временные части.

Ответ 13

В дополнение к тому, что уже сказал @jseals. Я думаю, что класс org.apache.commons.lang.time.DateUtils, вероятно, вы должны смотреть.

Метод: truncate (Дата дата, поле int) очень хорошо работала для меня.

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)

Ответ 14

Вы также можете вручную изменить временную часть даты и формата в шаблоне "dd/mm/yyyy" в соответствии с вашими требованиями.

  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>

Ответ 15

Не пытайтесь сделать это жестко, просто следуйте простым способом.

дата - это строка, в которой сохранена ваша дата.

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

теперь напечатайте значение s2. это уменьшит длину строки, и вы получите только дату.

Ответ 16

Другим способом разработки здесь является использование java.sql.Date, поскольку sql Date не имеет времени, связанного с ним, тогда как java.util.Date всегда имеет временную метку. В этом смысле java.sql.Date расширяет java.util.Date, поэтому переменная java.util.Date может быть ссылкой на java.sql.Date(без времени) и на java.util.Date, конечно (с меткой времени).