2

たとえば、日付型として文字列変数があり、次の String myDate= "20130403"; ように 3 つの異なる日付形式に分けたいとします。

String myDay = "03";
String myMonth= "04";
String myYear= "2013";

文字列を分離する最速の方法は?

ありがとう

4

9 に答える 9

6
String yourDateString = "20130403";
SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
Date currentDate = sd.parse(yourDateString);

Calendar cal = Calendar.getInstance();
cal.setTime(currentDate);
String year = String.valueOf(cal.get(Calendar.YEAR)) + "";

// As Gyro said month start at 0 to 11.
String month = String.valueOf(cal.get(Calendar.MONTH)+1) + "";  

String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)) + "";
于 2013-08-01T08:43:03.957 に答える
4

これが固定形式の場合は、単純に部分文字列を使用してください。

    String myDate= "20130403";
    String myYear = myDate.substring(0,4);
    String myMonth= myDate.substring(4,6);
    String myDay= myDate.substring(6,8);

    System.out.println(myDay);
    System.out.println(myMonth);
    System.out.println(myYear);
于 2013-08-01T08:40:49.400 に答える
3

日付がそのような形式であることが確実にわかっている場合は、これに関数をyyyyMMdd使用できますsubString

String myDate = "20120221"

String year = myDate.subString(0,4);
String month = myDate.subString(4,6);
String day = myDate.subString(6);
于 2013-08-01T08:40:10.543 に答える
2

これには、特別なJavaの単純な日付形式を使用したいと思います。

于 2013-08-01T08:42:54.483 に答える
2

部分文字列を試していますか? このように(私が考える最良の方法であり、最速でもあります):

@Test
final public void testStringDateOperation() {
    final String myDate= "20130403";
  final String year = myDate.substring(0, 4);
    final String month = myDate.substring(4, 6);
    final String day = myDate.substring(6, 8);
    Logger.trace("year: {0} - month: {1} - day: {2}", year, month, day);
}
于 2013-08-01T08:59:19.330 に答える
0

substring はタスクを実行する可能性がありますが、最速の方法ではありません。Substring は、すべてのトークンに対して新しい文字列オブジェクトを作成するため、パフォーマンス効率や最速の方法ではありません。以下は、Java src の subString() のソース コードです。

public String More ...substring(int beginIndex, int endIndex) {
 if (beginIndex < 0) {
     throw new StringIndexOutOfBoundsException(beginIndex);
 }
 if (endIndex > count) {
     throw new StringIndexOutOfBoundsException(endIndex);
 }
 if (beginIndex > endIndex) {
     throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
 }
 return ((beginIndex == 0) && (endIndex == count)) ? this :
     **new String(offset + beginIndex, endIndex - beginIndex, value);**

}

したがって、最善の方法は、私によると正規表現を使用して分割することです。

よろしくプニス

于 2013-08-02T12:42:31.190 に答える