3

String次の形式のインスタンスがあります。

yyyyMMddHHmmss

そして、その要素を整数変数に分割したいと思います。サンプルの場合:

String date_time = "20080519145436"; 

上記の文字列の結果は次のようになります。

int year  = 2008;
int month  = 05;
int day  = 19;
int hour  = 14;
int minutes  = 54;
int second  = 36;

この問題を解決する方法は2つあります。

  1. SimpleDateFormatterおよびフェッチ要素を使用します。
  2. クラスsubString()のメソッドを使用します。String

私の質問は:どちらの方法が提案されていますか?別の方法がありますか?

4

5 に答える 5

7

JodaTimeの日付フォーマットメカニズムを使用します。

例えば:

final DateTimeFormatter parser = DateTimeFormat.forPattern ( "yyyyMMddHHmmss" );
final DateTime date = parser.parseDateTime( "20080519145436" );
int year = date.getYear();
...
于 2012-12-30T08:14:49.577 に答える
2

SimpleDateFormatを使用するだけです

String date_time = "20080519145436"; 
        SimpleDateFormat df =new SimpleDateFormat("yyyyMMddHHmmss");
        Date d= df.parse(date_time);
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        System.out.println(cal.get(Calendar.YEAR));
于 2012-12-30T08:21:34.080 に答える
2

String.subString()の使用についても考えないでください。日付は文字列ではありません。入力の健全性チェックがまったく行われないため、日付を文字列として処理しようとしないでください。任意の14桁の入力を入力でき、アルゴリズムはそれをmonth=42のような意味のない日付部分に分割します。SimpleDateFormatter、JodaTime、または日付オブジェクトに特化したその他のアルゴリズムを使用すると、このような場合に例外がスローされます。

于 2012-12-30T08:34:43.447 に答える
0

別の方法は

    long d = Long.parseLong("20080519145436");
    int year = (int) (d / 10000000000L);
    int month = (int) (d / 100000000L % 100);
    int day = (int) (d / 1000000L % 100);
    int hour = (int) (d / 10000L % 100);
    int minutes = (int) (d / 100L % 100);
    int second = (int) (d % 100);

オプションに関しては、#2の方が速いと思います

int year = Integer.parseInt(date_time.substring(0, 4)); 
...

SimpleDateFormatは遅いことがわかっているためです。

于 2012-12-30T08:20:29.547 に答える
0

SimpleDateFormatterとフェッチ要素を使用します。

于 2012-12-30T08:40:08.360 に答える