2014-11-12 16 views
1

привет у меня есть дата и время строка в 24-часовом формате, но я хочу его в 12 часов, как я могу сделать это моя строка являетсякак преобразовать дату и время 12-часовой формат

String date_st="12 Nov, 2014 23:13" 

я делаю это

SimpleDateFormat dateformat = new SimpleDateFormat("dd' 'MMM,' 'yyyy HH:mm aa"); 

, но его не преобразование в соответствии с моей потребности она показывает 23:13 PM

я хочу показать в следующем формате

String con_date= "12 Nov, 2014 11:13 PM" 

как я могу это сделать?

+0

'K' и 'ч' возврата время в формате 12 часов, время возврата «H» и «k» в формате 24 часа больше: http://developer.android.com/reference/java/text/SimpleDateFormat.html –

+0

вы имеете в виду, что я могу написать его как SimpleDateFormat dateformat = new SimpleDateFormat ("dd '' MMM, 'yyyy KK: mm"); –

ответ

5

Вам нужны два формата: один для разбора и один для форматирования. Вам необходимо разобрать с String по номеру Date с номером DateFormat, а затем отформатировать его Date в формате String с другим форматом.

В настоящее время ваш единственный SimpleDateFormat находится на полпути между вами - у вас есть HH, который является 24-часовым, но у вас также есть aa, который для am/pm. Вы хотите HH без aa для ввода, и hhсaa для вывода. (Это почти никогда целесообразно иметь как HH и aa.)

TimeZone utc = TimeZone.getTimeZone("etc/UTC"); 
DateFormat inputFormat = new SimpleDateFormat("dd MMM, yyyy HH:mm", 
               Locale.US); 
inputFormat.setTimeZone(utc); 
DateFormat outputFormat = new SimpleDateFormat("dd MMM, yyyy hh:mm aa", 
               Locale.US); 
outputFormat.setTimeZone(utc); 

Date date = inputFormat.parse(input); 
String output = outputFormat.format(date); 

Обратите внимание, что я устанавливаю локаль США, так что всегда можно разобрать «ноябрь», и часовой пояс по Гринвичу, так что вы дона не нужно беспокоиться о том, что некоторые моменты были пропущены или неоднозначны.

+0

ваше предыдущее решение работает –

+0

@AhsanMalik: Вы имеете в виду тот, где я не устанавливал языковой стандарт или часовой пояс? Если это так, он будет работать * если * вы находитесь в правильном локали и * если * данная дата/время не является двусмысленной/пропущена в часовом поясе по умолчанию. Я предпочитаю давать ответы, которые будут работать для всех действительных входных данных, хотя :) Конечно, если ваш ввод действительно использует имена месяца из текущего языка, вы не должны указывать локаль ...но, по моему опыту, большую часть времени, когда вы разбираете текстовое представление, которое включает в себя имя месяца, оно * * на английском языке, даже если пользователь не является. –

+0

@JonSkeet: хороший ответ, хорошо объясненный ... нет другого ответа, требуемого здесь ... отлично ... + 1 – ajitksharma

2

Попробуйте понять SimpleDateFormat Символ и значение:

Symbol  Meaning 
    H  hour in day (0-23) 
    K  hour in am/pm (0-11) 
    h  hour in am/pm (1-12) 
    k  hour in day (1-24) 

SimpleDateFormat dateformat = new SimpleDateFormat("dd' 'MMM,' 'yyyy KK:mm aa"); 

ИЛИ

SimpleDateFormat dateformat = new SimpleDateFormat("dd' 'MMM,' 'yyyy hh:mm aa"); 

Пример:

convertDateStringFormat("12 Nov, 2014 23:13","dd MMM, yyyy HH:mm","dd MMM, yyyy hh:mm aa") 

public String convertDateStringFormat(String strDate, String fromFormat, String toFormat){ 
    try{ 
     SimpleDateFormat sdf = new SimpleDateFormat(fromFormat); 
     sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
     SimpleDateFormat dateFormat2 = new SimpleDateFormat(toFormat.trim()); 
     return dateFormat2.format(sdf.parse(strDate)); 
    }catch (Exception e) { 
     e.printStackTrace(); 
     return ""; 
    } 
} 
0

попробовать с этим ответом этого является кратчайшим d лучший ответ на стек.

Calendar c = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss aa"); 
    Datetime = sdf.format(c.getTime()); 
    System.out.println("============="+Datetime); 

Результат: - ========= 2015-11-20 5:52:25 PM

попробовать по этой ссылке Link here

Смежные вопросы