如何将字符串转换为时间格式并添加两个小时

时间:2009-04-17 04:31:57

标签: java datetime

我在项目中有以下要求。

我有一个名称为startDate的输入字段,用户输入的格式为YYYY-MM-DD HH:MM:SS。 我需要在startDate字段中为用户输入添加两个小时。我怎么能这样做。

提前致谢

9 个答案:

答案 0 :(得分:44)

您可以使用SimpleDateFormat将String转换为Date。之后你有两个选择,

  • 创建一个Calendar对象,然后使用它添加两个小时,或
  • 从该日期对象获取以毫秒为单位的时间,并添加两个小时,如(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);
    

查看这些教程。

答案 1 :(得分:33)

成为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()方法,以便于翻译。

与Java Date / Calendar API相比,Joda API提供了更多便利。

答案 2 :(得分:4)

使用SimpleDateFormatparse()方法。此方法将返回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 :(得分:4)

尝试这个,我测试一下,工作正常

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 :(得分:3)

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

答案 5 :(得分:1)

添加两次的基本程序:
您可以根据需要使用if else修改hour:min:sec。
该程序向您展示如何从两个对象添加值并返回另一个对象。

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


    }

}

修改时间添加计划

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

答案 6 :(得分:1)

此示例是日期时间和时区(字符串值)的总和

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 

谢谢:)

答案 7 :(得分:0)

这会给你你想要的时间(例如: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())); 

答案 8 :(得分:0)

TL;博士

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

java.time

现代方法使用添加到Java 8,Java 9及更高版本的 java.time 类。

  

用户输入格式为YYYY-MM-DD HH:MM:SS

将输入字符串解析为日期时间对象。您的格式接近于符合标准ISO 8601格式,默认情况下在java.time类中用于解析/生成字符串。要完全符合要求,请使用T替换中间的SPACE。

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 位置,而不是任何一个特定位置。只是在1月21日中午#34;#34;可能意味着新西兰奥克兰的中午比法国巴黎中午早几个小时发生。

要定义实际时刻,您必须指定区域或偏移。

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及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore