Java文字列から日付への変換


886

String「2010年1月2日」形式のDateをJavaのに変換する最良の方法は何ですか?

最終的には、月、日、年を整数として分割して使用できるようにします

Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();

日付を時間に変換します。


15
回答の多くは、ロケールやタイムゾーンなどの微妙な点を無視していることに注意してください。Date、Calendar、TimeZone、Locale、SimpleDateFormatクラスを使用する前に、それらのドキュメントをよく読んでおくことをお勧めします。
クリストファージョンソン2013

2
可能性のある重複java.util.Dateに変換文字列
はAnkur

7
Java 8は新しい日付/時刻APIを提供します。Java 8(またはそれ以降)を使用している場合は、この答えを確認する必要があります:stackoverflow.com/a/22180505/1115554
micha

2
のセッターはすべてDate非推奨です。
Raedwald 14

5
FYI、といった面倒な古い日付時刻クラスjava.util.Datejava.util.Calendarjava.text.SimpleTextFormat今のレガシーに取って代わられ、java.timeのクラス。Oracleによるチュートリアルを参照してください。
バジルブルク2017年

回答:


1641

これは難しい方法であり、それらのjava.util.DateセッターメソッドはJava 1.1(1997)以降廃止されています。入力文字列に一致するフォーマットパターンSimpleDateFormat使用して日付をフォーマットするだけです

入力文字列としての「2010年1月2日」の特定のケースでは、次のようになります。

  1. 「January」はフルテキストの月なので、MMMMパターンを使用します
  2. 「2」は短い月なので、dパターンを使用します。
  3. 「2010」は4桁の年なので、そのyyyyパターンを使用します。

String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 GMT 2010

明示的なLocale引数の重要性に注意してください。これを省略すると、デフォルトのロケールが使用されます。これは、入力文字列の月の名前で使用されている英語とは限りません。ロケールが入力文字列と一致しないjava.text.ParseException場合、フォーマットパターンが有効であるように見えても、混乱を招く可能性があります。

javadocからの関連性の抜粋を以下に示します。使用可能なすべてのフォーマットパターンがリストされています。

Letter  Date or Time Component  Presentation        Examples
------  ----------------------  ------------------  -------------------------------------
G       Era designator          Text                AD
y       Year                    Year                1996; 96
Y       Week year               Year                2009; 09
M/L     Month in year           Month               July; Jul; 07
w       Week in year            Number              27
W       Week in month           Number              2
D       Day in year             Number              189
d       Day in month            Number              10
F       Day of week in month    Number              2
E       Day in week             Text                Tuesday; Tue
u       Day number of week      Number              1
a       Am/pm marker            Text                PM
H       Hour in day (0-23)      Number              0
k       Hour in day (1-24)      Number              24
K       Hour in am/pm (0-11)    Number              0
h       Hour in am/pm (1-12)    Number              12
m       Minute in hour          Number              30
s       Second in minute        Number              55
S       Millisecond             Number              978
z       Time zone               General time zone   Pacific Standard Time; PST; GMT-08:00
Z       Time zone               RFC 822 time zone   -0800
X       Time zone               ISO 8601 time zone  -08; -0800; -08:00

パターンは大文字と小文字が区別され、4文字以上のテキストベースのパターンは完全な形式を表すことに注意してください。それ以外の場合は、可能な場合は短い形式または省略された形式が使用されます。したがって、たとえばMMMMM、それ以上は不要です。

これはSimpleDateFormat、特定の文字列を現在までに解析するための有効なパターンの例です。

Input string                            Pattern
------------------------------------    ----------------------------
2001.07.04 AD at 12:08:56 PDT           yyyy.MM.dd G 'at' HH:mm:ss z
Wed, Jul 4, '01                         EEE, MMM d, ''yy
12:08 PM                                h:mm a
12 o'clock PM, Pacific Daylight Time    hh 'o''clock' a, zzzz
0:08 PM, PDT                            K:mm a, z
02001.July.04 AD 12:08 PM               yyyyy.MMMM.dd GGG hh:mm aaa
Wed, 4 Jul 2001 12:08:56 -0700          EEE, d MMM yyyy HH:mm:ss Z
010704120856-0700                       yyMMddHHmmssZ
2001-07-04T12:08:56.235-0700            yyyy-MM-dd'T'HH:mm:ss.SSSZ
2001-07-04T12:08:56.235-07:00           yyyy-MM-dd'T'HH:mm:ss.SSSXXX
2001-W27-3                              YYYY-'W'ww-u

重要な点は、スレッドセーフでSimpleDateFormatないということです。つまり、それを静的変数またはインスタンス変数として宣言して割り当ててから、別のメソッド/スレッドから再利用しないでください。常にメソッドローカルスコープ内で新しいものを作成する必要があります。


Java 8アップデート

Java 8以降を使用している場合は、を使用してくださいDateTimeFormatter(ここでも、リンクをクリックして、すべての定義済みフォーマッターと使用可能なフォーマットパターンを確認してください。チュートリアルは、こちらから入手できます)。この新しいAPIはJodaTimeに触発されました

String string = "January 2, 2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date); // 2010-01-02

注:書式パターンに時間の部分も含まれている場合は、のLocalDateTime#parse(text, formatter)代わりにを使用してくださいLocalDate#parse(text, formatter)。また、フォーマットパターンにタイムゾーンも含まれている場合は、ZonedDateTime#parse(text, formatter)代わりに使用してください。

javadocからの関連性の抜粋を以下に示します。使用可能なすべてのフォーマットパターンがリストされています。

Symbol  Meaning                     Presentation  Examples
------  --------------------------  ------------  ----------------------------------------------
G       era                         text          AD; Anno Domini; A
u       year                        year          2004; 04
y       year-of-era                 year          2004; 04
D       day-of-year                 number        189
M/L     month-of-year               number/text   7; 07; Jul; July; J
d       day-of-month                number        10

Q/q     quarter-of-year             number/text   3; 03; Q3; 3rd quarter
Y       week-based-year             year          1996; 96
w       week-of-week-based-year     number        27
W       week-of-month               number        4
E       day-of-week                 text          Tue; Tuesday; T
e/c     localized day-of-week       number/text   2; 02; Tue; Tuesday; T
F       week-of-month               number        3

a       am-pm-of-day                text          PM
h       clock-hour-of-am-pm (1-12)  number        12
K       hour-of-am-pm (0-11)        number        0
k       clock-hour-of-am-pm (1-24)  number        0

H       hour-of-day (0-23)          number        0
m       minute-of-hour              number        30
s       second-of-minute            number        55
S       fraction-of-second          fraction      978
A       milli-of-day                number        1234
n       nano-of-second              number        987654321
N       nano-of-day                 number        1234000000

V       time-zone ID                zone-id       America/Los_Angeles; Z; -08:30
z       time-zone name              zone-name     Pacific Standard Time; PST
O       localized zone-offset       offset-O      GMT+8; GMT+08:00; UTC-08:00;
X       zone-offset 'Z' for zero    offset-X      Z; -08; -0830; -08:30; -083015; -08:30:15;
x       zone-offset                 offset-x      +0000; -08; -0830; -08:30; -083015; -08:30:15;
Z       zone-offset                 offset-Z      +0000; -0800; -08:00;

より一般的なパターン用にいくつかの定義済みフォーマッターがあることに注意してください。したがって、たとえばDateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);、代わりに使用できますDateTimeFormatter.RFC_1123_DATE_TIME。これは、とは対照的にSimpleDateFormat、スレッドセーフであるために可能です。したがって、必要に応じて独自に定義することもできます。

特定の入力文字列形式では、明示的に使用する必要はありません。2016-09-26T17:44:57ZのようなDateTimeFormatter標準のISO 8601日付は、LocalDateTime#parse(text)既にISO_LOCAL_DATE_TIMEフォーマッターを使用しているため、直接解析できます。同様に、LocalDate#parse(text)時刻コンポーネントなしでISO日付を解析し(を参照ISO_LOCAL_DATE)、ZonedDateTime#parse(text)オフセットとタイムゾーンを追加してISO日付を解析します(を参照ISO_ZONED_DATE_TIME)。


こんにちは、オプションでO、のUTC+08:00代わりに印刷する方法GMT+08:00。どんな例も得られなかった。
theGamblerRises

日付を解析する方法はたくさんあります
。DateFormat.parseの

こんにちはBalusC、私は文字列を持っています20-JUN-16 12.00.00.000000000 AM。これを日付に変換するのに助けが必要です。あなたの助けは大歓迎です!!
mannedear 2018

@mannedearああすみません。それは私の間違いでした。とにかく私はあなたがここでそれを見ることができる答えを得た:stackoverflow.com/questions/50982310/...
Queendevelopers

74

ああ、Java Dateのディスカッションです。日付操作を処理するには、DateCalendarGregorianCalendar、およびSimpleDateFormatを使用します。たとえば、1月の日付を入力として使用します。

Calendar mydate = new GregorianCalendar();
String mystring = "January 2, 2010";
Date thedate = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(mystring);
mydate.setTime(thedate);
//breakdown
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));

次に、次のように操作できます。

Calendar now = Calendar.getInstance();
mydate.set(Calendar.YEAR,2009);
mydate.set(Calendar.MONTH,Calendar.FEBRUARY);
mydate.set(Calendar.DAY_OF_MONTH,25);
mydate.set(Calendar.HOUR_OF_DAY,now.get(Calendar.HOUR_OF_DAY));
mydate.set(Calendar.MINUTE,now.get(Calendar.MINUTE));
mydate.set(Calendar.SECOND,now.get(Calendar.SECOND));
// or with one statement
//mydate.set(2009, Calendar.FEBRUARY, 25, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), now.get(Calendar.SECOND));
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));

17
1月は月番号であることを忘れないでください... 0
Nicolas Zozol '16

50
String str_date = "11-June-07";
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("dd-MMM-yy");
date = formatter.parse(str_date);

13
宣言と定義を分離する目的は何ですか(最初の変数については行われません)。
Peter Mortensen

43

Java 8では、新しい日付/時刻API(JSR 310)を取得しています。

次の方法を使用して、Joda-Timeに依存せずにJava 8で日付を解析できます。

 String str = "January 2nd, 2010";

// if we 2nd even we have changed in pattern also it is not working please workout with 2nd 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM Q, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(str, formatter);

// access date fields
int year = date.getYear(); // 2010
int day = date.getDayOfMonth(); // 2
Month month = date.getMonth(); // JANUARY
int monthAsInt = month.getValue(); // 1

LocalDateは、日付(時間なし)を表すための標準のJava 8クラスです。日付と時刻の情報を含む値を解析する場合は、LocalDateTimeを使用する必要があります。タイムゾーンのある値にはZonedDateTimeを使用します。どちらも次のようなparse()メソッドを提供しますLocalDate

LocalDateTime dateWithTime = LocalDateTime.parse(strWithDateAndTime, dateTimeFormatter);
ZonedDateTime zoned = ZonedDateTime.parse(strWithTimeZone, zoneFormatter);

DateTimeFormatter Javadocのリスト書式設定文字:

All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. 
The following pattern letters are defined:

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
 G       era                         text              AD; Anno Domini; A
 u       year                        year              2004; 04
 y       year-of-era                 year              2004; 04
 D       day-of-year                 number            189
 M/L     month-of-year               number/text       7; 07; Jul; July; J
 d       day-of-month                number            10

 Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
 Y       week-based-year             year              1996; 96
 w       week-of-week-based-year     number            27
 W       week-of-month               number            4
 E       day-of-week                 text              Tue; Tuesday; T
 e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
 F       week-of-month               number            3

 a       am-pm-of-day                text              PM
 h       clock-hour-of-am-pm (1-12)  number            12
 K       hour-of-am-pm (0-11)        number            0
 k       clock-hour-of-am-pm (1-24)  number            0

 H       hour-of-day (0-23)          number            0
 m       minute-of-hour              number            30
 s       second-of-minute            number            55
 S       fraction-of-second          fraction          978
 A       milli-of-day                number            1234
 n       nano-of-second              number            987654321
 N       nano-of-day                 number            1234000000

 V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
 z       time-zone name              zone-name         Pacific Standard Time; PST
 O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
 X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
 x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
 Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

秒の端数はどのように機能しますか?LocalDateTimeを使用する場合date = LocalDateTime.parse( "20140920111713000"、DateTimeFormatter.of‌ Pattern( "yyyyMMddHHm‌ mssSSS")); 失敗しますが、LocalDateTimeを使用すると、date = LocalDateTime.parse( "20140920111713.000"、DateTimeFormatter.o‌ fPattern( "yyyyMMddHH‌ mmss.SSS")); 機能します
reos

27

一部の回答は技術的に正しいですが、お勧めできません。

  • java.util.Date&Calendarクラスは、非常に面倒です。設計と実装の欠陥のため、それらを避けてください。幸い、他に2つの優れた日時ライブラリを選択できます。
    • Joda-Time
      この人気のあるオープンソースの無料ライブラリは、Javaの複数のバージョンで使用できます。その使用例の多くはStackOverflowにあります。これらのいくつかを読むことは、あなたが素早くスピードアップするのに役立ちます。
    • java.time。*パッケージ
      この新しいクラスのセットは、 Joda -Timeに触発され、JSR 310によって定義されています。これらのクラスはJava 8に組み込まれています。これらのクラスをJava 7にバックポートするプロジェクトが進行中ですが、そのバックポートはオラクル。
  • クリストファー・ジョンソンが質問への彼のコメントで正しく述べたように、他の回答は以下の重要な問題を無視します:
    • 時刻の
      日付には日付部分と時刻部分の両方があります)
    • タイムゾーン
      1日の始まりはタイムゾーンによって異なります。時間帯の指定に失敗した場合、JVMのデフォルトの時間帯が適用されます。つまり、コードの動作は、他のコンピューターで実行したり、タイムゾーン設定を変更したりすると変更される可能性があります。おそらくあなたが望むものではありません。
    • ロケール
      ロケールの言語は、解析中に検出された単語(月と日の名前)を解釈する方法を指定します。(これはBalusC回答で適切に処理されます。)また、日付時刻の文字列表現を生成するときに、ロケールは一部のフォーマッターの出力に影響します。

ジョーダタイム

Joda-Timeに関するいくつかの注意事項が続きます。

タイムゾーン

ジョダタイムのDateTimeオブジェクトは、本当に、自身の割り当てられたタイムゾーンを知っています。これは、タイムゾーンを持っているように見えても持っていないjava.util.Dateクラスと対照的です。

以下のサンプルコードで、文字列を解析するフォーマッタにタイムゾーンオブジェクトを渡す方法に注意してください。そのタイムゾーンは、その日時がそのタイムゾーンで発生したものとして解釈するために使用されます。そのため、その文字列入力によって表されるタイムゾーンを考えて決定する必要があります。

入力文字列に時間部分がないため、Joda-Timeは指定されたタイムゾーンの1日の最初の瞬間を時刻として割り当てます。通常00:00:00、これは夏時間(DST)またはその他の異常のために必ずというわけではありません。ちなみに、を呼び出すことで、任意のDateTimeインスタンスに対して同じことができますwithTimeAtStartOfDay

フォーマッターパターン

フォーマッタのパターンで使用される文字は、Joda-Timeではjava.util.Date/Calendarの文字と似ていますが、まったく同じではありません。ドキュメントを注意深く読んでください。

不変性

通常、Joda-Timeでは不変クラスを使用します。既存のDate-Timeオブジェクトを変更するのではなく、変更が必要な場合を除いて、ほとんどのアスペクトがコピーされた他のオブジェクトに基づいて新しい新しいインスタンスを作成するメソッドを呼び出します。例は、withZone下の最後の行の呼び出しです。不変性Joda -Timeを非常にスレッドセーフにするのに役立ち、一部の作業をより明確にすることもできます。

変換

Joda-Timeオブジェクトを知らない他のクラス/フレームワークで使用するには、java.util.Dateオブジェクトが必要です。幸いにも、前後に移動するのは非常に簡単です。

java.util.Dateオブジェクト(ここではdate)からJoda-Time DateTime…

org.joda.time.DateTime dateTime = new DateTime( date, timeZone );

Joda-Timeからjava.util.Dateオブジェクトへと別の方向へ…

java.util.Date date = dateTime.toDate();

サンプルコード

String input = "January 2, 2010";

java.util.Locale locale = java.util.Locale.US;
DateTimeZone timeZone = DateTimeZone.forID( "Pacific/Honolulu" ); // Arbitrarily chosen for example.
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMMM d, yyyy" ).withZone( timeZone ).withLocale( locale );
DateTime dateTime = formatter.parseDateTime( input );

System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTime in UTC/GMT: " + dateTime.withZone( DateTimeZone.UTC ) );

実行すると…

dateTime: 2010-01-02T00:00:00.000-10:00
dateTime in UTC/GMT: 2010-01-02T10:00:00.000Z

20

SimpleDateFormatクラスを扱う際、Dateはスレッドセーフではなく、単一のDateオブジェクトを複数のスレッドと共有できないことに注意することが重要です。

また、「m」と「M」の間には大きな違いがあり、小さなケースが分に使用され、大文字が月に使用されます。「d」と「D」についても同様です。これは、しばしば見落とされる微妙なバグを引き起こす可能性があります。詳細については、JavadocまたはJava文字列を日付に変換するためのガイドを参照してください。


1
このm / Mの差は、指摘してくれてありがとう、私は5分のフラストレーションを感じました:)
Buffalo

他の人がこれに言及しなかったのには驚きです。Webアプリケーション(またはその他のマルチスレッドアプリ)でSimpleDateFormatを使用することは、大したことではありません。Java 7までは、「FastDateFormat」を使用してきました。
JackLThornton 2017

18
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date;
try {
    date = dateFormat.parse("2013-12-4");
    System.out.println(date.toString()); // Wed Dec 04 00:00:00 CST 2013

    String output = dateFormat.format(date);
    System.out.println(output); // 2013-12-04
} 
catch (ParseException e) {
    e.printStackTrace();
}

それは私にとってはうまくいきます。


5
これにより、Wed Dec 04 00:00:00 GST 2013が2013-12-04ではなく出力として返されます
Shams

ParseExceptionののtry / catchでラップする必要があります
スヴァローグ

これは期待どおりの値を返しません。アドバイスする前にテストしてください
lifemoveson

7

SimpleDateformatを使用して文字列を日付に変更できます

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strDate = "2000-01-01";
Date date = new Date(sdf.parse(strDate).getTime());


1
SimpleDateFormat解析メソッドは、日付オブジェクトを返します。では、なぜDateコンストラクタを使用するのでしょうか。
ネスパプ

6

また、SimpleDateFormatは、次のようなクライアント側テクノロジーの一部では使用できません。 GWT

Calendar.getInstance()を使用することをお勧めします。要件は2つの日付を比較することです。長いデートに行きます。


6

使用したシンプルな2つのフォーマッター:

  1. どの形式の日付が必要ですか?
  2. 実際にどの形式の日付が存在しますか?

日付から時刻までの完全な形式を解析します。

date="2016-05-06 16:40:32";

public static String setDateParsing(String date) throws ParseException {

    // This is the format date we want
    DateFormat mSDF = new SimpleDateFormat("hh:mm a");

    // This format date is actually present
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-mm-dd hh:mm");
    return mSDF.format(formatter.parse(date));
}

5

私の謙虚なテストプログラム。私はそれを使って、フォーマッターを試したり、ログファイルで見つけた長い日付を調べたりします(しかし、誰がそこに置いたのか...)。

私のテストプログラム:

package be.test.package.time;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

public class TimeWork {

    public static void main(String[] args) {    

        TimeZone timezone = TimeZone.getTimeZone("UTC");

        List<Long> longs = new ArrayList<>();
        List<String> strings = new ArrayList<>();

        //Formatting a date needs a timezone - otherwise the date get formatted to your system time zone.
        //Use 24h format HH. In 12h format hh can be in range 0-11, which makes 12 overflow to 0.
        DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS");
        formatter.setTimeZone(timezone);

        Date now = new Date();

        //Test dates
        strings.add(formatter.format(now));
        strings.add("01-01-1970 00:00:00.000");
        strings.add("01-01-1970 00:00:01.000");
        strings.add("01-01-1970 00:01:00.000");
        strings.add("01-01-1970 01:00:00.000");
        strings.add("01-01-1970 10:00:00.000");
        strings.add("01-01-1970 12:00:00.000");
        strings.add("01-01-1970 24:00:00.000");
        strings.add("02-01-1970 00:00:00.000");
        strings.add("01-01-1971 00:00:00.000");
        strings.add("01-01-2014 00:00:00.000");
        strings.add("31-12-1969 23:59:59.000");
        strings.add("31-12-1969 23:59:00.000");
        strings.add("31-12-1969 23:00:00.000");

        //Test data
        longs.add(now.getTime());
        longs.add(-1L);
        longs.add(0L); //Long date presentation at - midnight 1/1/1970 UTC - The timezone is important!
        longs.add(1L);
        longs.add(1000L);
        longs.add(60000L);
        longs.add(3600000L);
        longs.add(36000000L);
        longs.add(43200000L);
        longs.add(86400000L);
        longs.add(31536000000L);
        longs.add(1388534400000L);
        longs.add(7260000L);
        longs.add(1417706084037L);
        longs.add(-7260000L);

        System.out.println("===== String to long =====");

        //Show the long value of the date
        for (String string: strings) {
            try {
                Date date = formatter.parse(string);
                System.out.println("Formated date : " + string + " = Long = " + date.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

        System.out.println("===== Long to String =====");

        //Show the date behind the long
        for (Long lo : longs) {
            Date date = new Date(lo);
            String string = formatter.format(date);
            System.out.println("Formated date : " + string + " = Long = " + lo);        
        }
    }
}

試験結果:

===== String to long =====
Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
Formated date : 01-01-1970 00:00:00.000 = Long = 0
Formated date : 01-01-1970 00:00:01.000 = Long = 1000
Formated date : 01-01-1970 00:01:00.000 = Long = 60000
Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
Formated date : 01-01-1970 24:00:00.000 = Long = 86400000
Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
Formated date : 31-12-1969 23:59:59.000 = Long = -1000
Formated date : 31-12-1969 23:59:00.000 = Long = -60000
Formated date : 31-12-1969 23:00:00.000 = Long = -3600000
===== Long to String =====
Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
Formated date : 31-12-1969 23:59:59.999 = Long = -1
Formated date : 01-01-1970 00:00:00.000 = Long = 0
Formated date : 01-01-1970 00:00:00.001 = Long = 1
Formated date : 01-01-1970 00:00:01.000 = Long = 1000
Formated date : 01-01-1970 00:01:00.000 = Long = 60000
Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
Formated date : 01-01-1970 02:01:00.000 = Long = 7260000
Formated date : 04-12-2014 15:14:44.037 = Long = 1417706084037
Formated date : 31-12-1969 21:59:00.000 = Long = -7260000

2

ソースリンク

以下のためのAndroid

Calendar.getInstance()。getTime()

Thu Jul 26 15:54:13 GMT+05:30 2018

使用する

String oldDate = "Thu Jul 26 15:54:13 GMT+05:30 2018";
DateFormat format = new SimpleDateFormat("EEE LLL dd HH:mm:ss Z yyyy");
Date updateLast = format.parse(oldDate);

0

文字列から日付への変換:

private Date StringtoDate(String date) throws Exception {
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
            java.sql.Date sqlDate = null;
            if( !date.isEmpty()) {

                try {
                    java.util.Date normalDate = sdf1.parse(date);
                    sqlDate = new java.sql.Date(normalDate.getTime());
                } catch (ParseException e) {
                    throw new Exception("Not able to Parse the date", e);
                }
            }
            return sqlDate;
        }

-1

これを試して

String date = get_pump_data.getString("bond_end_date");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date datee = (Date)format.parse(date);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.