как преобразовать строку в формат времени и добавить два часа - PullRequest
30 голосов
/ 17 апреля 2009

У меня есть следующее требование в проекте.

У меня есть поле ввода по имени startDate, и пользователь вводит в формате YYYY-MM-DD HH:MM:SS. Мне нужно добавить два часа для пользовательского ввода в поле startDate. как я могу это сделать.

Заранее спасибо

Ответы [ 9 ]

44 голосов
/ 17 апреля 2009

Вы можете использовать SimpleDateFormat для преобразования строки в дату. И после этого у вас есть два варианта,

  • Создайте объект календаря и затем используйте его, чтобы добавить два часа, или
  • получить время в миллисекунде от этого объекта даты и добавить два часа, например, (2 * 60 * 60 * 1000)

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    // replace with your start date string
    Date d = df.parse("2008-04-16 00:05:05"); 
    Calendar gc = new GregorianCalendar();
    gc.setTime(d);
    gc.add(Calendar.HOUR, 2);
    Date d2 = gc.getTime();
    

    Или,

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    // replace with your start date string
    Date d = df.parse("2008-04-16 00:05:05");
    Long time = d.getTime();
    time +=(2*60*60*1000);
    Date d2 = new Date(time);
    

Посмотрите эти уроки.

33 голосов
/ 17 апреля 2009

Будучи поклонником библиотеки Joda Time , вот как вы можете сделать это, используя Joda DateTime:

import org.joda.time.format.*;
import org.joda.time.*;

...    

String dateString = "2009-04-17 10:41:33";

// parse the string
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = formatter.parseDateTime(dateString);

// add two hours
dateTime = dateTime.plusHours(2); // easier than mucking about with Calendar and constants

System.out.println(dateTime);

Если вам все еще нужно использовать java.util.Date объекты до / после этого преобразования, Joda DateTime API предоставляет несколько простых toDate() и toCalendar() методов для простого перевод.

API Joda предоставляет гораздо больше удобных способов по сравнению с Java Date / Calendar API.

4 голосов
/ 25 июля 2012

Попробуйте это, я проверяю, работает нормально

Date date = null;
String str = "2012/07/25 12:00:00";
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
date = formatter.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR, 2);
System.out.println(calendar.getTime());  // Output : Wed Jul 25 14:00:00 IST 2012

Если вы хотите преобразовать в свой тип ввода, добавьте также этот код

formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
str=formatter.format(calendar.getTime());
System.out.println(str);  // Output : 2012-07-25 14:00:00
4 голосов
/ 17 апреля 2009

Используйте метод SimpleDateFormat class parse(). Этот метод вернет объект Date. Затем вы можете создать Calendar объект для этого Date и добавить к нему 2 часа.

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(theDateToParse);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, 2);
cal.getTime(); // This will give you the time you want.
3 голосов
/ 09 сентября 2011
//the parsed time zone offset:
DateTimeFormatter dateFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
String fromDateTimeObj = "2011-01-03T12:00:00.000-0800";
DateTime fromDatetime = dateFormat.withOffsetParsed().parseDateTime(fromDateTimeObj);
1 голос
/ 26 марта 2015

Этот пример представляет собой сумму для даты, времени и часового пояса (строковые значения)

String DateVal = "2015-03-26 12:00:00";
String TimeVal = "02:00:00";

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss");

Date reslt = sdf.parse( DateVal );
Date timeZ = sdf2.parse( TimeVal );
//Increase Date Time
reslt.setHours( reslt.getHours() + timeZ.getHours());
reslt.setMinutes( reslt.getMinutes() + timeZ.getMinutes());
reslt.setSeconds( reslt.getSeconds() + timeZ.getSeconds());

System.printLn.out( sdf.format(reslt) );//Result(+2 Hours):  2015-03-26 14:00:00 

Спасибо:)

1 голос
/ 08 июля 2013

Базовая программа добавления двух раз:
Вы можете изменить час: мин: сек в соответствии с вашими потребностями, используя if else.
Эта программа показывает, как вы можете добавить значения из двух объектов и вернуть их в другой объект.

class demo
{private int hour,min,sec;
    void input(int hour,int min,int sec)
    {this.hour=hour;
    this.min=min;
    this.sec=sec;

    }
    demo add(demo d2)//demo  because we are returning object
    {   demo obj=new demo();
    obj.hour=hour+d2.hour;
    obj.min=min+d2.min;
    obj.sec=sec+d2.sec;
    return obj;//Returning object and later on it gets allocated to demo d3                    
    }
    void display()
    {
        System.out.println(hour+":"+min+":"+sec);
    }
    public static  void main(String args[])
    {
        demo d1=new demo();
        demo d2=new demo();
        d1.input(2, 5, 10);
        d2.input(3, 3, 3);
        demo d3=d1.add(d2);//Note another object is created
        d3.display();


    }

}

Модифицированная программа добавления времени

</p>

<code> class demo
 {private int hour,min,sec;
    void input(int hour,int min,int sec)
    {this.hour=(hour>12&&hour<24)?(hour-12):hour;
    this.min=(min>60)?0:min;
    this.sec=(sec>60)?0:sec;

    }
    demo add(demo d2)
    {   demo obj=new demo();
    obj.hour=hour+d2.hour;
    obj.min=min+d2.min;
    obj.sec=sec+d2.sec;
    if(obj.sec>60)
    {obj.sec-=60;
        obj.min++;
    }
    if(obj.min>60)
    {   obj.min-=60;
        obj.hour++;
    }
        return obj;
    }
    void display()
    {
        System.out.println(hour+":"+min+":"+sec);
    }
    public static  void main(String args[])
    {
        demo d1=new demo();
        demo d2=new demo();
        d1.input(12, 55, 55);
        d2.input(12, 7, 6);
        demo d3=d1.add(d2);
        d3.display();


    }

 }
</code>
0 голосов
/ 26 января 2018

ТЛ; др

LocalDateTime.parse( 
    "2018-01-23 01:23:45".replace( " " , "T" )  
).plusHours( 2 )

java.time

Современный подход использует классы java.time , добавленные в Java 8, Java 9 и более поздние версии.

пользователь вводит в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС

Разобрать эту входную строку в объекте даты и времени. Ваш формат почти соответствует стандартному формату ISO 8601, используемому по умолчанию в классах java.time для разбора / генерации строк. Чтобы полностью соответствовать, замените ПРОБЕЛ в середине на T.

String input = "2018-01-23 01:23:45".replace( " " , "T" ) ; // Yields: 2018-01-23T01:23:45

Анализировать как LocalDateTime, учитывая, что на вашем входе отсутствует индикатор часового пояса или смещения от UTC.

LocalDateTime ldt = LocalDateTime.parse( input ) ;

добавить два часа

Классы java.time могут сделать математику за вас.

LocalDateTime twoHoursLater = ldt.plusHours( 2 ) ;

часовой пояс

Имейте в виду, что LocalDateTime не представляет момент, точку на временной шкале. Без контекста часового пояса или смещения от UTC это не имеет никакого реального значения. «Местная» часть названия означает любой населенный пункт или no населенный пункт, а не какой-либо один конкретный населенный пункт. Просто сказать «полдень 21 января» может означать полдень в Окленде, Новая Зеландия, что происходит на несколько часов раньше, чем полдень в Париже, Франция.

Чтобы определить фактический момент, вы должны указать зону или смещение.

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;  // Define an actual moment, a point on the timeline by giving a context with time zone.

Если вы точно знаете предполагаемый часовой пояс, примените его до , добавив два часа. Класс LocalDateTime предполагает простые общие 24-часовые дни при выполнении математики. Но в разных часовых поясах в разные даты дни могут длиться 23 или 25 часов или могут быть другой длины. Таким образом, для получения правильных результатов в зональном контексте добавьте часы к вашему ZonedDateTime, а не LocalDateTime.


О java.time

Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date, Calendar и & SimpleDateFormat.

Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .

Где получить классы java.time?

  • Java SE 8 , Java SE 9 и выше
    • Встроенный.
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии Android связывают реализации классов java.time.
    • Для более ранних версий Android проект ThreeTenABP адаптируется ThreeTen-Backport (упоминалось выше). См. Как использовать ThreeTenABP… .

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

0 голосов
/ 19 мая 2017

Это даст вам время, которое вы хотите (например, 21:31 PM)

//Add 2 Hours to just TIME
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss a");
Date date2 = formatter.parse("19:31:51 PM");
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
cal2.add(Calendar.HOUR_OF_DAY, 2);
SimpleDateFormat printTimeFormat = new SimpleDateFormat("HH:mm a");
System.out.println(printTimeFormat.format(cal2.getTime())); 
...