从字符串中解析日期

时间:2016-04-06 04:28:03

标签: java string date extract

我有这样的字符串:

String strDateTimeStamp = "2016-02-29 18:31:51";

现在我想提取它以获得以下格式的结果:

String strYear = "2016";
String strMonth = "02";
String strDate = "29";
String strHour = "18";
String strMinute = "31";
String strSecond = "51";

7 个答案:

答案 0 :(得分:5)

如果您正在使用日期,则应考虑使用日历:

    String strDateTimeStamp = "2016-02-29 18:31:51";
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date date = sdf.parse(strDateTimeStamp);
    Calendar cal = new Calendar.Builder().setInstant(date).build();

    String strYear = Integer.toString(cal.get(Calendar.YEAR));
    // Calendar MONTH is starting from 0 we need to add 1
    String strMonth = Integer.toString(cal.get(Calendar.MONTH) + 1);
    String strDate = Integer.toString(cal.get(Calendar.DATE));

    String strHour = Integer.toString(cal.get(Calendar.HOUR_OF_DAY));
    String strMinute = Integer.toString(cal.get(Calendar.MINUTE));
    String strSecond = Integer.toString(cal.get(Calendar.SECOND));

答案 1 :(得分:3)

使用java.util.Datejava.text.DateFormat / .SimpleDateFormat的所有答案都已过时。那些旧的日期时间类设计很差,令人困惑,而且很麻烦。避免它们。

java.time

java.time框架内置于Java 8及更高版本中。与旧的日期时间类相比有了很大的改进。

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。

首先,用T替换输入字符串中间的SPACE以符合ISO 8601标准。在解析/生成字符串时,默认情况下在java.time类中使用这些标准格式。

String input = "2016-02-29 18:31:51".replace( " " , "T" );

解析为LocalDateTime。 “本地”表示与任何时区无关。所以这是时间轴上的实际时刻。但在本课题的背景下显然不是问题。

LocalDateTime ldt = LocalDateTime.parse( input );

现在,您可以通过调用各种getter方法,根据需要询问各种部分。这些方法返回int primitive,您当然可以将其转换为字符串值。

答案 2 :(得分:0)

您可以通过拆分String

来做到这一点
String[] splittedString = strDateTimeStamp.split("-|:|\\s");

String strYear = splittedString[0];
String strMonth = splittedString[1];
String strDate = splittedString[2];
String strHour = splittedString[3];
String strMinute = splittedString[4];
String strSecond = splittedString[5];

答案 3 :(得分:0)

首先使用split(" ")基于空格分割字符串..它将为您提供长度为2的字符串数组。其中包含(2016-03-04)(16:32:33)。然后分别使用split("-")split(":")分割字符串againg。你会得到你的答案。请自行尝试代码,可能对您更好。

答案 4 :(得分:0)

试试这个..

    String CurrentString = "2016-02-29 18:31:51";
    String[] separated = CurrentString.split(" ");
    String date = separated[0];
    String time = separated[1];
    String[] separated_date = date.split("-");
    String[] separated_time = time.split(":");
    String strYear = separated_date[0];
    String strMonth = separated_date[1];
    String strDate = separated_date[2];
    String strHour = separated_time[0];
    String strMinute = separated_time[1];
    String strSecond = separated_time[2];

答案 5 :(得分:0)

我建议使用" [ - :]"

等模式正则表达式

实施例

public static void main(String[] args) {
    String strDateTimeStamp = "2016-02-29 18:31:51";
    String[] solution = strDateTimeStamp.split("[- :]");
    for (int i = 0; i < solution.length; i++) {
        System.out.println(solution[i]);
    }
}

这将生成一个包含所需元素的数组

答案 6 :(得分:0)

  String strDateTimeStamp = "2016-02-29 18:31:51";
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = sdf.parse(strDateTimeStamp);
Calendar cal = new Calendar.Builder().setInstant(date).build();

String strYear = Integer.toString(cal.get(Calendar.YEAR));
// Calendar MONTH is starting from 0 we need to add 1 
String strMonth = Integer.toString(cal.get(Calendar.MONTH) + 1);
String strDate = Integer.toString(cal.get(Calendar.DATE));

String strHour = Integer.toString(cal.get(Calendar.HOUR_OF_DAY));
String strMinute = Integer.toString(cal.get(Calendar.MINUTE));
String strSecond = Integer.toString(cal.get(Calendar.SECOND));