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」です。
簡単な答えは:
いいえ、許可されていません。それは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 を確認してください。
時間、分、秒、ミリ秒の値をゼロに設定することにより、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には"truncate"というメソッドがありますが、これは以前使用していた方法であり、ニーズを満たすと思います。使い方はとても簡単です。
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));
必要なのはimpossibleです。
Date
オブジェクトは、「絶対的な」瞬間を表します。 「時間部分を削除」することはできません。 Date
オブジェクトをSystem.out.println(date)
で直接印刷すると、常に時刻を含むデフォルトの形式でフォーマットされます。それを変えるためにできることは何もありません。
何らかの理由でクラスDate
を使用しないように設計することを試みる代わりに、別の解決策を探す必要があります。たとえば、SimpleDateFormat
を使用して、希望する形式で日付をフォーマットします。
残念ながら、Java日付およびカレンダーAPIは、標準Java APIの最も適切に設計されたクラスではありません。 Joda-Time と呼ばれるライブラリがあり、はるかに優れた強力なAPIを備えています。
Joda-Timeには、日付、時刻、期間、期間などをサポートするための特別なクラスがいくつかあります。時間のない日付のみを処理する場合、Joda-Timeの LocalDate
クラスは使用します。
以下のコードは、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();
これが役に立てば幸いです。
次のようなものを試すことができます:
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);
}
}
たとえば、それを書くことができます:
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())
これは非推奨ですが、最も高速な方法です。
ちょっとしたファッジですが、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をラップし、その時間部分を無視する可能性があります。
時刻のない日付に使用する正しいクラスは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は数年後に登場し、古いDate
、Calendar
、SimpleDateFormat
、およびDateFormat
を置き換えました。それらが不十分に設計されたことを認識しています。さらに、Date
という名前にもかかわらず、日付を表すことはできません。それはある時点です。他の答えは、JVMのデフォルトのタイムゾーンで時刻を1日の始まり(「真夜中」)に切り捨てることです。時刻は削除されず、通常は00:00に設定されるだけです。デフォルトのタイムゾーンを変更します-私が言ったように、同じJVMで実行されている別のプログラムでさえ、予告なしにいつでもそれを行うことができます-そしてすべてが壊れます(しばしば)。
リンク:Oracleチュートリアル:日時Java.time
の使用方法の説明。
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
日付の時刻部分を手動で変更し、要件に応じて"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>
ここで解決する別の方法は、sql.Dateには時間が関連付けられていないのでJava.sql.Dateを使用することですが、Java.util.Dateには常にタイムスタンプがあります。ここでの注意点は、Java.sql.DateがJava.util.Dateを拡張することです。したがって、Java.util.Date変数は、Java.sql.Date(時刻なし)およびJava.util.Date(もちろんタイムスタンプ付き)への参照になります。 )。
String substring(int startIndex, int endIndex)
つまり、文字列は10文字になるので、次のようにします。
FinalDate = date.substring(0,9);
@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)
誰もがこのくだらない答えを他のすべての人に提供したとは信じられません。これは何十年も廃止されています。
@SuppressWarnings("deprecation")
...
Date hitDate = new Date();
hitDate.setHours(0);
hitDate.setMinutes(0);
hitDate.setSeconds(0);