web-dev-qa-db-ja.com

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」です。

61
Laxman Rana

簡単な答えは:

いいえ、許可されていません。それはDateが使用するものだからです。

Dateのjavadocから:

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 を確認してください。

43
Rangi Lin

時間、分、秒、ミリ秒の値をゼロに設定することにより、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();
    }

}
110
Sunil Manheri

Apache Commons DateUtilsには"truncate"というメソッドがありますが、これは以前使用していた方法であり、ニーズを満たすと思います。使い方はとても簡単です。

DateUtils.truncate(dateYouWantToTruncate, Calendar.DAY_OF_MONTH);

DateUtilsには"isSameDay()"などのような他のクールなユーティリティのホストもあります。それをチェックしてください!それはあなたにとって物事を簡単にするかもしれません。

32
jseals

これはどうですか:

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

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

必要なのはimpossibleです。

Dateオブジェクトは、「絶対的な」瞬間を表します。 「時間部分を削除」することはできません。 DateオブジェクトをSystem.out.println(date)で直接印刷すると、常に時刻を含むデフォルトの形式でフォーマットされます。それを変えるためにできることは何もありません。

何らかの理由でクラスDateを使用しないように設計することを試みる代わりに、別の解決策を探す必要があります。たとえば、SimpleDateFormatを使用して、希望する形式で日付をフォーマットします。

残念ながら、Java日付およびカレンダーAPIは、標準Java AP​​Iの最も適切に設計されたクラスではありません。 Joda-Time と呼ばれるライブラリがあり、はるかに優れた強力なAPIを備えています。

Joda-Timeには、日付、時刻、期間、期間などをサポートするための特別なクラスがいくつかあります。時間のない日付のみを処理する場合、Joda-Timeの LocalDate クラスは使用します。

8
Jesper

以下のコードは、zeroHour of the dayを探している人に役立つかもしれません:

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

これが役に立てば幸いです。

4
Kris_P

次のようなものを試すことができます:

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

これにより、as21/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
heretolearn

たとえば、それを書くことができます:

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

これは非推奨ですが、最も高速な方法です。

2
Daniel

ちょっとしたファッジですが、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をラップし、その時間部分を無視する可能性があります。

1
RNJ

時刻のない日付に使用する正しいクラスはLocalDateです。 LocalDateは、最新のJava日時APIであるJava.timeの一部です。

できることは、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に想定されたタイムゾーンを挿入してください。 JVMのタイムゾーン設定にZoneId.systemDefault()を使用できます。この設定のみが、プログラムの他の部分または同じJVMで実行されている他のプログラムからいつでも変更できます。

Java.util.Dateクラスは、6年前にこの質問が行われたときに私たち全員が使用していたものです(いいえ、すべてではありません。 Java.timeは数年後に登場し、古いDateCalendarSimpleDateFormat、およびDateFormatを置き換えました。それらが不十分に設計されたことを認識しています。さらに、Dateという名前にもかかわらず、日付を表すことはできません。それはある時点です。他の答えは、JVMのデフォルトのタイムゾーンで時刻を1日の始まり(「真夜中」)に切り捨てることです。時刻は削除されず、通常は00:00に設定されるだけです。デフォルトのタイムゾーンを変更します-私が言ったように、同じJVMで実行されている別のプログラムでさえ、予告なしにいつでもそれを行うことができます-そしてすべてが壊れます(しばしば)。

リンク:Oracleチュートリアル:日時Java.timeの使用方法の説明。

1
Ole V.V.

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
Amy Doxy

日付の時刻部分を手動で変更し、要件に応じて"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
Rajesh

ここで解決する別の方法は、sql.Dateには時間が関連付けられていないのでJava.sql.Dateを使用することですが、Java.util.Dateには常にタイムスタンプがあります。ここでの注意点は、Java.sql.DateがJava.util.Dateを拡張することです。したがって、Java.util.Date変数は、Java.sql.Date(時刻なし)およびJava.util.Date(もちろんタイムスタンプ付き)への参照になります。 )。

0
Sourav
String substring(int startIndex, int endIndex)

つまり、文字列は10文字になるので、次のようにします。

FinalDate = date.substring(0,9);
0
Jeremy Sayers

@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)
0
Sahil J

誰もがこのくだらない答えを他のすべての人に提供したとは信じられません。これは何十年も廃止されています。

@SuppressWarnings("deprecation")
...
    Date hitDate = new Date();
    hitDate.setHours(0);
    hitDate.setMinutes(0);
    hitDate.setSeconds(0);
0
Chloe