2009-04-17 151 views
28

我在項目中有以下要求。如何將字符串轉換爲時間格式並添加兩個小時

我有一個名稱爲startDate的輸入字段,用戶輸入的格式爲YYYY-MM-DD HH:MM:SS。 我需要在startDate字段中爲用戶輸入添加兩個小時。我該怎麼做。

在此先感謝

+5

誤讀爲「stardate」。我甚至不喜歡*星際迷航。 – 2010-10-06 17:17:30

回答

43

您可以使用SimpleDateFormat將字符串轉換爲日期。在這之後,你有兩個選擇,

  • 做一個日曆對象,然後用它來添加兩個小時,或
  • 獲得自該日起對象毫秒的時間,並添加2小時像,( 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); 
    

看看這些教程。

4

使用SimpleDateFormatparse()方法。此方法將返回一個Date對象。然後,您可以爲此Date創建一個Calendar對象,併爲其添加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. 
+0

我正在給代碼。請告訴我它是否正確 日曆EDate = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat(「yyyy-MM-dd hh:mm:ss」); EDate.setTime(sdf.parse(enddate)); EDate.add(Calendar.Hour,1); – user48094 2009-04-17 04:46:20

+0

您擁有的日期字符串是AM還是PM?因爲你已經使用了小寫hh和Calendar.HOUR。我的代碼使用你的小時是24小時週期。 – 2009-04-17 04:48:58

33

身爲Joda Time庫的粉絲,這裏是如何使用這樣做的一個喬達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()方法。

Joda API在Java日期/日曆API方面提供了更多便利。

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

增加兩個的基本程序次:
您可以根據自己的需要修改小時:分鐘:秒。
該程序顯示如何從兩個對象中添加值並返回到另一個對象中。

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

謝謝:)

0

一個總和這會給你你的時間NT(如: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())); 
0

TL;博士

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

java.time

現代的方法使用java.time類添加到Java 8,爪哇9,以後。 MM::

用戶格式YYYY-MM-DD HH進入SS

解析該輸入字符串轉換成日期時間對象。您的格式接近與標準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) ; 

添加2小時

的java.time類可以爲你做數學題。

LocalDateTime twoHoursLater = ldt.plusHours(2) ; 

時區

要知道,一個LocalDateTime代表了一會兒,在時間軸上的一個點。如果沒有UTC時區或偏移量的上下文,它就沒有真正的意義。名稱中的「本地」部分是指任何本地或沒有地方,而不是任何一個特定的地方。只是說「中午1月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和更高版本。這些類代替了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore

相關問題