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 回答
3

您可以使用 SimpleDateFormat 将 String 解析为日期,并使用 Calendar 获取所需的所有字段。

    String myDate= "20130403";

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    try {
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(myDate));

        String myDay = (String)cal.get(Calendar.DATE);
        String myMonth = (String)(cal.get(Calendar.MONTH)+1);
        String myYear = (String)cal.get(Calendar.YEAR);
    } catch (ParseException e) {
        e.printStackTrace();
    }
于 2013-08-01T08:46:35.770 回答
2

如果您的数据字符串格式不会改变,您可以使用子字符串:

String myDate= "20130403";

String myDay = myDate.substring(6,8);
String myMonth = myDate.substring(4,6);
String myYear = myDate.substring(0,4);
于 2013-08-01T08:41:15.807 回答
2

我认为您想为此使用特殊的java 简单日期格式

于 2013-08-01T08:42:54.483 回答
2

如果字符串具有固定长度(例如,年份始终为 4 位,月份始终为 2,等等),您可以使用 substring() 方法。

在你的情况下:

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

如果字符串不是固定长度,您可以尝试使用分隔符,例如“-”。所以你的字符串看起来像这样 "2013-04-03" 然后简单地使用 String.split(); 功能。

例子:

String myDate = "2013-04-03";
String[] myDateElements = myDate.split("-");
String myYear = myDateElements[0];
String myMonth = myDateElements[1];
String myDay = myDateElements[2];
于 2013-08-01T08:44:15.530 回答
2

你试试 substring 吗?像这样(我认为最好的方式也是最快的):

@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 回答