2010-11-30 36 views
10

2010-06-14 02: 21: 49 + 0400 hoặc 2010-06-14 02: 21: 49-0400Nhận múi giờ địa phương của thiết bị

là có cách để chuyển đổi chuỗi này thành ngày theo múi giờ máy cục bộ với định dạng 2010/06/14 02:21

+1

thể trùng lặp của [ngày hiển thị theo múi giờ của thiết bị] (http://stackoverflow.com/questions/4312220/display-date- theo vùng thời gian-của-thiết bị) –

+0

Tôi vừa mới trả lời câu hỏi này gần đây. –

Trả lời

17

Thêm vào những gì @ org.life.java và @Erica nói, đây là những gì bạn nên do

String dateStr = "2010-06-14 02:21:49-0400"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"); 
TimeZone tz = TimeZone.getDefault(); 
sdf.setTimeZone(tz); 
Date date = sdf.parse(dateStr); 

sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
String newDateStr = sdf.format(date); 

System.out.println(newDateStr); 

Sau đó, newDateStr sẽ là chuỗi định dạng ngày mới của bạn.


CẬP NHẬT @xydev, ví dụ tôi đưa cho bạn hoạt động, xem mã nguồn đầy đủ dưới đây:

/** 
* 
*/ 
package testcases; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

/** 
* @author The Elite Gentleman 
* 
*/ 
public class Test { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     try { 
      String dateStr = "2010-06-14 02:21:49-0400"; 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"); 
      TimeZone tz = TimeZone.getDefault(); 
      sdf.setTimeZone(tz); 
      Date date = sdf.parse(dateStr); 

      sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
      String newDateStr = sdf.format(date); 

      System.out.println(newDateStr); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

Output: 2010-06-14 08:21:49 AM

+0

Tôi nhận được giá trị này cho "Ngày tháng" Thứ Hai 14 tháng 6 11:51:49 GMT + 00: 00 2010 .... và lỗi ứng dụng khi đạt đến bước " Chuỗi newDateStr = sdf.định dạng (ngày); " – xydev

+0

@xydev ... mỏ hoạt động như một nét duyên dáng ... xem mã đầy đủ của tôi .... –

+0

cảm ơn .. tôi hiểu rồi ... lỗi được gây ra bởi mã này \t \t \t // String dateStr =" 2010 -06-14 02: 21: 49-0400 "; // \t \t \t SimpleDateFormat sdf = SimpleDateFormat mới (" yyyy-mM-dd HH: mm: SSZ "); // \t \t \t TimeZone tz = TimeZone. getDefault(); // \t \t \t sdf.setTimeZone (tz); // \t \t \t date = "2010/06/14 02: 21: 49-0400"; // // \t \t \t thử { // \t \t \t \t ngày = sdf.parse (ngày); // \t \t \t} catch (ParseException e) {// \t \t \t \t // TODO Auto-tạo ra khối catch // \t \t \t \t e.printStackTrace(); // \t \t \t} – xydev

6

Sử dụng SimpleDateFormat

String string1 = "2010-06-14 02:21:49-0400"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ") 
sdf.setTimeZone(tz); 
Date date = sdf.parse(string1); 

Lưu ý: tôi không chắc chắn cùng lớp có sẵn trong Andriod.

+1

Câu trả lời hay. Bạn có thể cần phải tận dụng "mm" cho tháng mặc dù, nếu không bạn sẽ nhận được vài phút ở đó. :) – Erica

+0

Android dựa trên Java 1.5 nên lớp tồn tại. – Pentium10

+0

@Erica cảm ơn :), @ Pentium10 Cảm ơn thông tin –

1

Bạn có thể thực hiện tất cả các loại định dạng ưa thích và bản địa hóa các ngày bằng cách sử dụng lớp DateFormat. Có tài liệu hoàn chỉnh, rất tốt ở đầu trang API tại đây: http://download.oracle.com/javase/1.4.2/docs/api/java/text/DateFormat.html

Trường hợp thông thường nhất có thể được xử lý bằng đối tượng SimpleDateFormat. chi tiết của nó đang ở đây: http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

Các SimpleDateFormat mô hình chuỗi xuất cho ví dụ bạn có ở trên sẽ là:

yyyy-MM-dd hh:mm a 
+0

'a' là AM/PM, nó không lấy Múi giờ. –

+0

@ The-Elite-Gentlemen, vâng, đó là định dạng của chuỗi đầu ra xydev yêu cầu; "2010-06-14 02:21 AM". :) – Erica

0

Hãy cẩn thận rằng nếu bạn đang chạy trên giả lập múi giờ của bạn luôn là GMT. Tôi chỉ mất 2 giờ để cố gắng hiểu tại sao ứng dụng của tôi không cho tôi thời điểm thích hợp (máy tính của tôi hiển thị) cho đến khi tôi nhận ra đó là do trình mô phỏng.

Để kiểm tra bạn đang chạy trên việc sử dụng giả lập

if (Build.PRODUCT.contains("sdk")){ 
    // your code here for example if curtime has the emulator time 
    // since midnight in milliseconds then 
    curtime += 2 * 60 * 60 * 1000; // to add 2 hours from GMT 
} 
Các vấn đề liên quan