Android, Dizeyi Tarihe Nasıl Dönüştürebilirim?


142

Uygulama kullanıcı tarafından her başlatıldığında geçerli saati veritabanında saklar.

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

Veritabanı tarafında, geçerli saati dize olarak saklıyorum (yukarıdaki kodda gördüğünüz gibi). Bu nedenle, veritabanından yüklediğimde, Date nesnesine yayınlamam gerekiyor. Hepsinin "DateFormat" kullandığını gösteren bazı örnekler gördüm. Ancak biçimim tam olarak Tarih biçimiyle aynı. Yani, "DateFormat" kullanmaya gerek olmadığını düşünüyorum. Haklı mıyım?

Bu String to Date nesnesini doğrudan yayınlamak için yine de var mı? Saklanan bu zamanı şimdiki zamanla karşılaştırmak istiyorum.

Teşekkürler

======> güncelleme

Teşekkürler canım beyler. Aşağıdaki kodu kullandım:

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;            

   }

Yanıtlar:


419

Dizeden Tarihe

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

Tarihten Dizeye

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

Tam olarak - veritabanına kaydetmeden önce tarih dizesine standart bir form uygulamak daha iyidir. Bu durumda en.wikipedia.org/wiki/ISO_8601
denis.solonenko

"Dizeden bugüne" konusunda daha kesin bir çözüm bulmak için "format.setLenient (false);" denemeden önce ... yakalamak blok. Bu şekilde, önceden doğru bir dize tarihinin kontrolü daha iyi olacaktır.
Alecs

Ben inanmıyorum SimpleDateFormat.format()bir istisna atar
Birisi bir yerde

2
SDK sürümünüz Marshmallow'a eşit veya daha büyükse, bu şekilde kullanın 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
bir değişken olarak String ayrıştırmak için değil mi? Çünkü bu şekilde "string" kelimesini ayrıştırmaya çalışıyor.
Marco

6

SimpleDateFormat veya DateFormat sınıfını kullanarak

örneğin

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

Date nesnenizin tarihi ve çıktı:

Çar 14 Mar 13:30:00 UTC 2018

14 Mart 2018


Çok teşekkür ederim!
Maryoomi1

1

Bu duruma c.getTime().toString();bağlı yerel ayara dikkat etmek iyi bir fikir olabilir .

Bir fikir zamanı saniye cinsinden saklamaktır (örneğin UNIX zamanı ). Bir olarak intkolayca karşılaştırabilirsiniz ve daha sonra kullanıcıya görüntülerken dizeye dönüştürürsünüz.


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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.