我在项目中有以下要求。
我有一个名称为startDate
的输入字段,用户输入的格式为YYYY-MM-DD HH:MM:SS
。
我需要在startDate
字段中为用户输入添加两个小时。我怎么能这样做。
提前致谢
答案 0 :(得分:44)
您可以使用SimpleDateFormat将String转换为Date。之后你有两个选择,
从该日期对象获取以毫秒为单位的时间,并添加两个小时,如(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)
使用SimpleDateFormat
类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 :(得分: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)
LocalDateTime.parse(
"2018-01-23 01:23:45".replace( " " , "T" )
).plusHours( 2 )
现代方法使用添加到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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。