62
задан 18 December 2013 в 18:02

19 ответов

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

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

От javadoc Date:

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

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

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

Входная строка: 20.01.2012 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

: 20.01.2012 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.

43
ответ дан 31 October 2019 в 13:08

Не может полагать, что никто не предложил этот поганый ответ со всей остальной частью их. Это было удержано от использования в течение многих десятилетий.

@SuppressWarnings("deprecation")
...
    Date hitDate = new Date();
    hitDate.setHours(0);
    hitDate.setMinutes(0);
    hitDate.setSeconds(0);
-1
ответ дан 31 October 2019 в 13:08

Не пытайтесь мешать, просто следуют за простым путем

, дата является строкой, где Ваша дата сохраняется

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

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

-1
ответ дан 31 October 2019 в 13:08

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

Это - метод: усеченный (Дата даты, международное поле) работал очень хорошо на меня.

JavaDocs: https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html#truncate (java.util. Дата , интервал)

, Так как необходимо было усечь все время поля, которые можно использовать:

DateUtils.truncate(new Date(),Calendar.DAY_OF_MONTH)
0
ответ дан 31 October 2019 в 13:08

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

0
ответ дан 31 October 2019 в 13:08

Можно также вручную изменить часть времени даты и формата в шаблон "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>
0
ответ дан 31 October 2019 в 13:08
String substring(int startIndex, int endIndex)

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

FinalDate = date.substring(0,9);
0
ответ дан 31 October 2019 в 13:08

При использовании Java 8 + используйте java.time. Тип LocalDate вместо этого.

LocalDate now = LocalDate.now();
System.out.println(now.toString());

вывод:

2019-05-30

https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html

1
ответ дан 31 October 2019 в 13:08

Корректный класс для использования для даты без времени суток LocalDate. LocalDate часть java.time, современная дата и время Java API.

, Таким образом, лучшая вещь, которую можно сделать, состоит в том, если можно изменить getStartDate метод, Вы используете для возврата LocalDate:

    DateTimeFormatter dateFormatter = DateTimeFormatter
            .ofLocalizedDate(FormatStyle.SHORT)
            .withLocale(Locale.forLanguageTag("en-IE"));

    LocalDate d = eventList.get(0).getStartDate(); // We’re now getting a LocalDate using this method
    String dateString = d.format(dateFormatter);
    System.out.println(dateString);

Пример произвел:

21/03/2012

, Если Вы не можете измениться эти getStartDate, можно все еще смочь добавить новый метод, возвратив тип, который мы хотим. Однако, если Вы не можете позволить себе сделать это сейчас, преобразовать старомодное Date, что Вы добираетесь (я принимаю java.util.Date):

    d = eventList.get(0).getStartDate(); // I'm getting the old-fashioned Date using this method
    LocalDate dateWithoutTime = d.toInstant()
            .atZone(ZoneId.of("Asia/Kolkata"))
            .toLocalDate();

вставьте часовой пояс, который был принят для Date. Можно использовать ZoneId.systemDefault() для установки часового пояса JVM’s, только эти настройки могут быть изменены в любое время от других частей программы или других программ, работающих в той же JVM.

java.util.Date класс был тем, что мы все использовали, когда этот вопрос задали 6 лет назад (не, не все; я был, и мы были многими). java.time вышел несколько лет спустя и заменил старое Date, Calendar, SimpleDateFormat и DateFormat. Распознавание, что они были плохо разработаны. Кроме того, Date несмотря на его имя не может представить дату. It’s момент времени. То, что делают другие ответы, они округляют время в меньшую сторону до запуска дня (“midnight”) в часовом поясе по умолчанию JVM’s. Это doesn’t удаляет время суток, только наборы это, обычно к 0:00. Измените свой часовой пояс по умолчанию —, как я сказал, даже другая программа, работающая в той же JVM, может сделать это в любое время без уведомления —, и все будет повреждаться (часто).

Ссылка: учебное руководство Oracle: Время Даты объяснение, как использовать java.time.

1
ответ дан 31 October 2019 в 13:08

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

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

1
ответ дан 31 October 2019 в 13:08
Date dateWithoutTime =
    new Date(myDate.getYear(),myDate.getMonth(),myDate.getDate()) 

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

2
ответ дан 31 October 2019 в 13:08

Можно записать что, например:

private Date TruncarFecha(Date fechaParametro) throws ParseException {
    String fecha="";
    DateFormat outputFormatter = new SimpleDateFormat("MM/dd/yyyy");
    fecha =outputFormatter.format(fechaParametro);
    return outputFormatter.parse(fecha);
}
3
ответ дан 31 October 2019 в 13:08

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

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);
    }
}
3
ответ дан 31 October 2019 в 13:08

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

Hope это будет полезно.

5
ответ дан 31 October 2019 в 13:08

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

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

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

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

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

8
ответ дан 31 October 2019 в 13:08

Что относительно этого:

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

    today = sdf.parse(sdf.format(today));
12
ответ дан 31 October 2019 в 13:08

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

DateUtils.truncate(dateYouWantToTruncate, Calendar.DAY_OF_MONTH);

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

34
ответ дан 31 October 2019 в 13:08

Можно удалить часть времени из java.util. Дата путем установки часа, минуты, второй и миллисекунда, оценивает нулю.

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

}
110
ответ дан 31 October 2019 в 13:08

Что-то вроде выдумки, но Вы могли использовать java.sql. Дата. Это только сохранило часть даты, и основанное на нуле время (полночь)

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. Дата и игнорирует части времени его.

1
ответ дан 31 October 2019 в 13:08

Другие вопросы по тегам:

Похожие вопросы: