2009-04-17 37 views

Trả lời

43

Bạn có thể sử dụng SimpleDateFormat để chuyển đổi chuỗi thành ngày. Và sau đó bạn có hai lựa chọn,

  • Thực hiện một đối tượng Lịch và và sau đó sử dụng để thêm hai tiếng đồng hồ, hoặc
  • có được thời gian trong một phần nghìn giây từ đó đối tượng ngày, và thêm hai tiếng đồng hồ như thế nào, (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(); 
    

    Hoặc,

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

Hãy xem các hướng dẫn này.

4

Sử dụng SimpleDateFormat lớp parse() phương pháp. Phương thức này sẽ trả về đối tượng Date. Sau đó, bạn có thể tạo đối tượng Calendar cho số này Date và thêm 2 giờ vào đối tượng đó.

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

tôi đang đưa mã. hãy cho tôi biết nó có chính xác hay không Lịch EDATE = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd hh: mm: ss"); EDate.setTime (sdf.parse (enddate)); EDate.add (Calendar.Hour, 1); – user48094

+0

Chuỗi ngày bạn có là AM hoặc PM? Bởi vì bạn đã sử dụng hh thấp hơn trong giờ và cũng là Calendar.HOUR. Mã của tôi đã sử dụng giờ của bạn là 24 giờ. –

33

Là một fan hâm mộ của thư viện Joda Time, dưới đây là cách bạn có thể làm nó theo cách đó sử dụng một 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); 

Nếu bạn vẫn cần phải sử dụng java.util.Date đối tượng trước/sau khi chuyển đổi này, Joda DateTime API cung cấp một số phương thức dễ dàng toDate()toCalendar() để dịch dễ dàng.

API Joda cung cấp nhiều hơn nữa trong cách tiện lợi trên API ngày/lịch Java.

+2

Mọi người nên là một fan hâm mộ của Joda. Thư viện tốt nhất mà tôi từng sử dụng. +1 – WolfmanDragon

+0

Tôi hoàn toàn đồng ý với Rob Hruska và WolfmanDragon.Thư viện này chỉ đơn giản để sử dụng và tôi cũng khuyên bạn nên thêm nó vào mọi dự án Java, nơi cần thao tác ngày/giờ (hầu như tất cả các dự án sau đó :)) –

+1

và tôi đồng ý với @ruffp. không có parens ;-) – virtualeyes

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

Hãy thử thế này, tôi thử nghiệm nó, làm việc tốt

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 

Nếu bạn muốn chuyển đổi trong kiểu đầu vào của bạn hơn thêm mã này cũng

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

chương trình cơ bản thêm hai lần:
Bạn có thể sửa đổi giờ: phút: giây theo nhu cầu sử dụng của bạn nếu có.
Chương trình này cho bạn thấy cách bạn có thể thêm các giá trị từ hai đối tượng và trả về trong một đối tượng khác.

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


    } 

} 

Modified Time Addition Chương trình

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

Ví dụ này là một Sum cho thời gian Date and Time Zone (Giá trị Chuỗi)

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 

Cảm ơn :)

0

Điều này sẽ cho bạn thời gian bạn đợi nt (ví dụ: 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; dr

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

java.time

Cách tiếp cận hiện đại sử dụng java.time lớp thêm vào Java 8, Java 9, và sau đó.

dùng nhập theo định dạng YYYY-MM-DD HH: MM: SS

Phân tích rằng chuỗi nhập vào một đối tượng ngày thời gian. Định dạng của bạn gần tuân thủ định dạng chuẩn ISO 8601, được sử dụng theo mặc định trong các lớp java.time để phân tích cú pháp/tạo chuỗi. Để tuân thủ đầy đủ, hãy thay thế SPACE ở giữa bằng T.

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

Phân tích cú pháp dưới dạng LocalDateTime cho biết đầu vào của bạn thiếu bất kỳ chỉ báo múi giờ hoặc offset-UTC nào.

LocalDateTime ldt = LocalDateTime.parse(input) ; 

thêm hai giờ

Các lớp java.time có thể làm toán cho bạn.

LocalDateTime twoHoursLater = ldt.plusHours(2) ; 

Time Zone

Hãy nhận biết rằng một LocalDateTime không không đại diện cho một thời điểm, một điểm trên timeline. Không có bối cảnh của một múi giờ hoặc offset-from-UTC, nó không có ý nghĩa thực sự. Phần "Địa phương" của tên có nghĩa là bất kỳ địa chỉ hoặc không địa phương nào, thay vì bất kỳ một địa phương cụ thể nào. Chỉ cần nói "trưa vào ngày 21 tháng 1" có thể có nghĩa là buổi trưa ở Auckland, New Zealand diễn ra sớm hơn vài giờ so với buổi trưa ở Paris nước Pháp.

Để xác định thời điểm thực tế, bạn phải chỉ định vùng hoặc khoảng trống.

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. 

Nếu bạn biết múi giờ dành cho nhất định, áp dụng nó trước thêm hai tiếng đồng hồ. Lớp LocalDateTime giả định các ngày 24 giờ chung đơn giản khi thực hiện phép tính. Nhưng trong các múi giờ khác nhau vào các ngày khác nhau, ngày có thể dài 23 hoặc 25 giờ hoặc có thể có độ dài khác.Vì vậy, để có kết quả chính xác trong ngữ cảnh được khoanh vùng, hãy thêm giờ vào số ZonedDateTime thay vì LocalDateTime.


Về java.time

Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date, Calendar, & SimpleDateFormat.

Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp java.time.

Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310.

Nơi lấy các lớp java.time?

  • Java SE 8, Java SE 9, và sau đó
    • Built-in.
    • Một phần của API Java chuẩn với gói được triển khai.
    • Java 9 thêm một số tính năng và bản sửa lỗi nhỏ.
  • Java SE 6Java SE 7
    • Hầu hết các chức năng java.time được back-chuyển đến Java 6 & 7 trong ThreeTen-Backport.
  • Android
    • phiên bản sau của triển khai bó Android của các lớp java.time.
    • Đối với Android trước đó, dự án ThreeTenABP thích hợp ThreeTen-Backport (đã đề cập ở trên). Xem How to use ThreeTenABP….

Dự án mở rộng ThreeTen-Extra java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval, YearWeek, YearQuartermore.

Các vấn đề liên quan