Android, Làm cách nào tôi có thể chuyển đổi chuỗi thành ngày?


142

Tôi lưu trữ thời gian hiện tại trong cơ sở dữ liệu mỗi lần ứng dụng bắt đầu bởi người dùng.

Calendar c = Calendar.getInstance();
    String str = c.getTime().toString();
    Log.i("Current time", str);

Về phía cơ sở dữ liệu, tôi lưu trữ thời gian hiện tại dưới dạng chuỗi (như bạn thấy trong đoạn mã trên). Do đó, khi tôi tải nó từ cơ sở dữ liệu, tôi cần truyền nó vào đối tượng Date. Tôi thấy một số mẫu mà tất cả chúng đã sử dụng "DateFormat". Nhưng định dạng của tôi giống hệt như định dạng Ngày. Vì vậy, tôi nghĩ rằng không cần sử dụng "DateFormat". Tôi có đúng không

Có cách nào để trực tiếp truyền đối tượng String to Date này không? Tôi muốn so sánh thời gian lưu trữ này với thời gian hiện tại.

Cảm ơn

======> cập nhật

Cảm ơn các bạn thân mến. Tôi đã sử dụng mã sau đây:

private boolean isPackageExpired(String date){
        boolean isExpired=false;
        Date expiredDate = stringToDate(date, "EEE MMM d HH:mm:ss zz yyyy");        
        if (new Date().after(expiredDate)) isExpired=true;

        return isExpired;
    }

    private Date stringToDate(String aDate,String aFormat) {

      if(aDate==null) return null;
      ParsePosition pos = new ParsePosition(0);
      SimpleDateFormat simpledateformat = new SimpleDateFormat(aFormat);
      Date stringDate = simpledateformat.parse(aDate, pos);
      return stringDate;            

   }

Câu trả lời:


419

Từ chuỗi đến ngày

String dtStart = "2010-10-15T09:27:37Z";  
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");  
try {  
    Date date = format.parse(dtStart);  
    System.out.println(date);  
} catch (ParseException e) {
    e.printStackTrace();  
}

Từ ngày đến chuỗi

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");  
try {  
    Date date = new Date();  
    String dateTime = dateFormat.format(date);
    System.out.println("Current Date Time : " + dateTime); 
} catch (ParseException e) {
    e.printStackTrace();  
}

Chính xác - tốt hơn là áp dụng một số hình thức tiêu chuẩn cho chuỗi ngày trước khi lưu trữ nó trong cơ sở dữ liệu. Trong trường hợp này en.wikipedia.org/wiki/ISO_8601
denis.solonenko

Đối với một giải pháp hoạt động nghiêm ngặt hơn về "chuỗi đến ngày", thật tiện lợi khi thêm "format.setLenient (false);" trước khi thử ... bắt khối. Bằng cách này, việc kiểm tra ngày chuỗi chính xác trước đây sẽ tốt hơn.
Alecs

Tôi không tin rằng SimpleDateFormat.format()ném một ngoại lệ
Ai đó ở đâu đó vào

2
nếu phiên bản SDK của bạn lớn hơn hoặc bằng Marshmallow thì hãy sử dụng như thế này SimpleDateFormat dateFormat =new SimpleDateFormat(""yyyy-MM-dd'T'HH:mm:ss'Z'"", Locale.getDefault());
Dheeraj Jaiswal

8
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date d = dateFormat.parse(datestring)

2
nó không giả sử phân tích chuỗi như một biến? Bởi vì theo cách này, nó đang cố phân tích từ "chuỗi".
Marco

6

sử dụng lớp SimpleDateFormat hoặc DateFormat thông qua

ví dụ

try{
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); // here set the pattern as you date in string was containing like date/month/year
Date d = sdf.parse("20/12/2011");
}catch(ParseException ex){
    // handle parsing exception if date string was different from the pattern applying into the SimpleDateFormat contructor
}

4
     import java.text.ParseException;
     import java.text.SimpleDateFormat;
     import java.util.Date;
     public class MyClass 
     {
     public static void main(String args[]) 
     {
     SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");

     String dateInString = "Wed Mar 14 15:30:00 EET 2018";

     SimpleDateFormat formatterOut = new SimpleDateFormat("dd MMM yyyy");


     try {

        Date date = formatter.parse(dateInString);
        System.out.println(date);
        System.out.println(formatterOut.format(date));

         } catch (ParseException e) {
        e.printStackTrace();
         }
    }
    }

đây là đối tượng Date của bạn ngày và sản lượng là:

Thứ Tư 14 tháng 3 13:30:00 UTC 2018

14 tháng 3 năm 2018


Cảm ơn bạn rất nhiều!
Maryoomi1

1

Nó có thể là một ý tưởng tốt để cẩn thận với Locale c.getTime().toString();tùy thuộc vào.

Một ý tưởng là lưu trữ thời gian tính bằng giây (ví dụ: thời gian UNIX ). Là một intbạn có thể dễ dàng so sánh nó, và sau đó bạn chỉ cần chuyển đổi nó thành chuỗi khi hiển thị nó cho người dùng.


1
String source = "24/10/17";

String[] sourceSplit= source.split("/");

int anno= Integer.parseInt(sourceSplit[2]);
int mese= Integer.parseInt(sourceSplit[1]);
int giorno= Integer.parseInt(sourceSplit[0]);

    GregorianCalendar calendar = new GregorianCalendar();
  calendar.set(anno,mese-1,giorno);
  Date   data1= calendar.getTime();
  SimpleDateFormat myFormat = new SimpleDateFormat("20yy-MM-dd");

    String   dayFormatted= myFormat.format(data1);

    System.out.println("data formattata,-->"+dayFormatted);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.