「12-December-2012」のような文字列内に日付があります。これをミリ秒(長い)に変換するにはどうすればよいですか?
9 に答える
String string_date = "12-December-2012";
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
try {
Date d = f.parse(string_date);
long milliseconds = d.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
そろそろ誰かがこの質問に対する現代的な答えを提供する時が来ました. 質問が出された2012年に、当時投稿された回答も良い回答でした。2016年に投稿された回答が当時の時代遅れのクラスも使用している理由は、SimpleDateFormat
私Date
にとってもう少し謎です。java.time
は、JSR-310 としても知られる最新の Java の日付と時刻の API であり、非常に使いやすいです。ThreeTenABP を介して Android で使用できます。この質問を参照してください: How to use ThreeTenABP in Android Project .
ほとんどの目的で、UTCでの 1 日の開始時のエポックからのミリ秒を使用することをお勧めします。これらを取得するには:
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("d-MMMM-uuuu", Locale.ENGLISH);
String stringDate = "12-December-2012";
long millisecondsSinceEpoch = LocalDate.parse(stringDate, dateFormatter)
.atStartOfDay(ZoneOffset.UTC)
.toInstant()
.toEpochMilli();
System.out.println(millisecondsSinceEpoch);
これは以下を出力します:
1355270400000
特定のタイム ゾーンでの開始時刻が必要な場合は、UTC の代わりにそのタイム ゾーンを指定します。次に例を示します。
.atStartOfDay(ZoneId.of("Asia/Karachi"))
予想どおり、これはわずかに異なる結果をもたらします。
1355252400000
もう 1 つの注意点として、ロケールを .xml ファイルに指定することを忘れないでくださいDateTimeFormatter
。12 月を英語としましたが、他の言語でもその月を同じように呼んでいるので、適切なロケールを自分で選択してください。ロケールを指定しなかった場合、フォーマッタは JVM のロケール設定を使用します。これは多くの場合は機能しますが、ある日、異なるロケール設定のデバイスでアプリを実行すると、予期せず失敗します。
SimpleDateFormat
aを解析して aString
を返すことができるクラスとクラスDate
のgetTime
メソッドを見てくださいDate
。
simpleDateFormat を使用して、文字列の日付を解析できます。
最も簡単な方法は、Date() と getTime() を使用した日付を使用することです
Date dte=new Date();
long milliSeconds = dte.getTime();
String strLong = Long.toString(milliSeconds);
System.out.println(milliSeconds)