Android, Bagaimana Saya Dapat Mengubah String Menjadi Tanggal?

142

Saya menyimpan waktu saat ini di basis data setiap aplikasi dimulai oleh pengguna.

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

Di sisi basis data, saya menyimpan waktu saat ini sebagai string (seperti yang Anda lihat dalam kode di atas). Oleh karena itu, ketika saya memuatnya dari database, saya harus melemparkannya ke objek Date. Saya melihat beberapa sampel yang semuanya menggunakan "DateFormat". Tetapi format saya persis sama dengan format Tanggal. Jadi, saya pikir tidak perlu menggunakan "DateFormat". Apakah saya benar?

Apakah ada pula untuk secara langsung melemparkan objek String to Date ini? Saya ingin membandingkan waktu yang disimpan ini dengan waktu saat ini.

Terima kasih

======> pembaruan

Terima kasih kawan. Saya menggunakan kode berikut:

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;            

   }
Hesam
sumber

Jawaban:

419

Dari String to Date

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

Dari Date to String

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();  
}
pengguna370305
sumber
Tepat - lebih baik menerapkan beberapa formulir standar ke string tanggal sebelum menyimpannya dalam database. Dalam hal ini en.wikipedia.org/wiki/ISO_8601
denis.solonenko
Untuk solusi yang lebih ketat pada "string to date", lebih mudah untuk menambahkan "format.setLenient (false);" sebelum mencoba ... tangkap blok. Dengan cara ini pemeriksaan tanggal string yang sebelumnya benar akan lebih baik.
Alecs
Saya tidak percaya itu SimpleDateFormat.format()melempar pengecualian
Seseorang di suatu tempat
2
jika versi SDK Anda lebih besar atau sama dengan Marshmallow, gunakan seperti ini 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)
Hiren Dabhi
sumber
2
itu tidak seharusnya mengurai String sebagai variabel? Karena dengan cara ini, ia mencoba mengurai kata "string".
Marco
6

menggunakan SimpleDateFormat atau DateFormat kelas melalui

untuk mis

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

di sini adalah tanggal objek Tanggal Anda dan hasilnya adalah:

Rabu 14 Maret 13:30:00 UTC 2018

14 Mar 2018

Janku
sumber
Terima kasih banyak!
Maryoomi1
1

Ini bisa menjadi ide yang baik untuk berhati-hati dengan Lokal tempat c.getTime().toString();bergantung.

Satu ide adalah untuk menyimpan waktu dalam hitungan detik (misalnya waktu UNIX ). Sebagai intAnda dapat dengan mudah membandingkannya, dan kemudian Anda hanya mengubahnya menjadi string ketika menampilkannya kepada pengguna.

JOG
sumber
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);
paolixx
sumber