2016-04-06 1 views
0

У меня есть строки, как это:Разбираем дату из строки

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"; 
+0

Вы должны использовать SimpleDateFormat https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html – JChap

ответ

0

Try This ..

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]; 
+0

Несмотря на то, что обеспечивает правильный ответ. Я не думаю, что это правильный способ обработки Дат. Он должен обрабатываться с помощью DateFormat или SimpleDateFormat. –

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]; 
0

Первый раскол строки, используя split(" ") на основе пространства .. это даст вам массив строки длиной 2. который содержит (2016-03-04) и (16:32:33). Затем разложите обе строки, используя split("-") и split(":"). вы получите ответ. Пожалуйста, попробуйте код по своему усмотрению, может быть лучше для вас.

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]); 
    } 
} 

это будет генерировать массив со всеми необходимыми элементами

+0

Regex всегда сохраняет ваше усилие больше ... –

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)); 
+0

Хотя Calendar.MONTH основан на нулевом значении. –

+0

Сделано исправление –

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)); 
3

Все ответы, используя java.util.Date и java.text.DateFormat/.SimpleDateFormat устарели. Те старые классы с датами плохо разработаны, запутываются и хлопотны. Избежать их.

java.time

java.time каркас встроен в Java 8 и более поздних версий. Огромное улучшение по сравнению с старыми классами времени.

Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport и дополнительно выполнен с возможностью Android в ThreeTenABP (см How to use…).

Сначала замените SPACE в середине вашей входной строки на T, чтобы соответствовать стандарту ISO 8601. Эти стандартные форматы используются по умолчанию в классах java.time при разборе/генерации строк.

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

Анализ в качестве LocalDateTime. «Локальный» означает не связанный с каким-либо часовым поясом. Так что это не фактический момент на шкале времени. Но, видимо, это не проблема в контексте этого Вопроса.

LocalDateTime ldt = LocalDateTime.parse(input); 

Теперь вы можете запросить свои различные предметы по мере необходимости, вызвав различные методы получения. Эти методы возвращают intprimitive, которые вы можете, конечно, преобразовать в значения String.

+1

Это должно быть принято как правильный ответ. –