2011-07-14 2 views
0

Мне нужно преобразовать String формы HHMM (в EST или EDT - сегодня) в метку времени в формате YYYYMMDD-HH: MM: SS. Поэтому, если я получу 1512, я хочу выразить 3: 12EDT в GMT и формате: 20110714-20: 12: 00. Как я могу это сделать?Преобразование строки HHMM в формат GMT в Java

Я пробовал следующий код, и он не конвертируется вообще.

int hour = Integer.parseInt(HHMM.substring(0, 2)); 
    int min = Integer.parseInt(HHMM.substring(2, 4)); 

    Date day = new Date(); 
    day.setHours(hour); 
    day.setMinutes(min); 
    day.setSeconds(00); 
    DateFormat gmtFormat = new SimpleDateFormat(); 
    gmtFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 

    gmtFormat.format(day); 

    return day.getYear() + "" + day.getMonth() + "" + 
      day.getDate() + "-" + day.getHours() + ":" + 
      day.getMinutes() + ":" + day.getSeconds(); 
+0

Только одно примечание, вы не должны использовать date.setHours, поскольку они устарели, попробуйте использовать объект Calendar. – RMT

+1

'gmt.format (day)' возвращает строку - вам не нужны эти результаты? –

+0

с календарем вы можете просто cal.set (Calendar.HOUR, hourValue); – RMT

ответ

0

Спасибо за ваши ответы, я объединил несколько ответов, чтобы получить следующий код, который правильно конвертируется в GMT и дает мне форматированную строку, требующую.

private static String convertHHMMtoGMT(String HHMM) 
{  
    Calendar day = Calendar.getInstance(); 
    day.set(Calendar.HOUR_OF_DAY, hour); 
    day.set(Calendar.MINUTE, min); 
    day.set(Calendar.SECOND, 00); 
    day.set(Calendar.MILLISECOND, 00);  

    SimpleDateFormat gmtFormat = new SimpleDateFormat("yyyyMMdd-HH:mm:ss"); 
    gmtFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 

    return gmtFormat.format(day.getTime()); 
} 
0

Как насчет

//obtain a formatted string with the year day month information for today 
    Date today = new Date(); 
    SimpleDateFormat todaySdf = new SimpleDateFormat("yyyyMMdd-"); 
    String todaySdfString = todaySdf.format(today); 

    //now concatenate today's info from above with the time info and then parse the whole thing 
    SimpleDateFormat edtFormat = new SimpleDateFormat("yyyyMMdd-HH:mmz"); 
    Date dt = edtFormat.parse(todaySdfString+"15:12EDT"); 

    //now GMT 
    SimpleDateFormat gmtFormat = new SimpleDateFormat("yyyyMMdd-HH:mm:ss"); 
    gmtFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
    String fmtDt = gmtFormat.format(dt); 
    System.out.println("fmtDt = " + fmtDt); 
+0

Вывод этого кода: dt = Thu Jan 01 02:12:00 EST 1970 fmtDt = 19700101-07: 12: 00 – Sarah

+0

Действительно ли время 3: 12EDT всегда на текущий день? – aldrin

+0

Да, всегда на сегодня – Sarah

0

Вы должны быть действительно с помощью календаря, но так, как вы его настроить теперь это должно работать:

Date day = new Date(); 
day.setHours(3); 
day.setMinutes(12); 
day.setSeconds(00); 

SimpleDateFormat gmtFormat = new SimpleDateFormat("yyyyMMdd-hh:mm:ss"); 
gmtFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 

Date fmtDay = gmtFormat.format(day); 
System.out.println("fmtDay: " + fmtDay); 
1

Это немного короче и понятнее (ИМО) в Joda:

public static String printIsoTime(String hhmm) { 
    DateTimeFormatter fmt = DateTimeFormat.forPattern("HHmm"); 

    // construct datetime from local midnight + parsed hhmm 
    DateTime localDateTime = new LocalDate().toDateTime(
     fmt.parseDateTime(hhmm).toLocalTime()); 

    // convert to UTC and print in ISO format 
    return ISODateTimeFormat.dateHourMinuteSecond() 
     .print(localDateTime.withZone(DateTimeZone.UTC)); 
} 
+0

Люди могут также совершить погружение с Джодой! JSR-310 не будет включен в JDK7, и пока он не будет готов, Joda, безусловно, лучше, чем встроенные классы. – jtoberon

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