Android, ฉันจะแปลงสตริงเป็นวันที่ได้อย่างไร?


142

ฉันเก็บเวลาปัจจุบันในฐานข้อมูลแต่ละครั้งที่แอปพลิเคชันเริ่มต้นโดยผู้ใช้

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

ในด้านฐานข้อมูลฉันเก็บเวลาปัจจุบันเป็นสตริง (ตามที่คุณเห็นในโค้ดด้านบน) ดังนั้นเมื่อฉันโหลดจากฐานข้อมูลฉันต้องส่งมันไปยังวัตถุวันที่ ฉันเห็นตัวอย่างบางส่วนที่พวกเขาทั้งหมดใช้ "DateFormat" แต่รูปแบบของฉันเหมือนกับรูปแบบวันที่ ดังนั้นฉันคิดว่าไม่จำเป็นต้องใช้ "DateFormat" ฉันถูกไหม?

อย่างไรก็ตามมีการโยนวัตถุ String to Date นี้โดยตรงหรือไม่ ฉันต้องการเปรียบเทียบเวลาที่เก็บไว้กับเวลาปัจจุบัน

ขอบคุณ

======> อัปเดต

ขอบคุณพวกที่รัก ฉันใช้รหัสต่อไปนี้:

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;            

   }

คำตอบ:


419

จากสตริงจนถึงปัจจุบัน

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

จากวันที่สตริง

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

แน่นอน - เป็นการดีกว่าที่จะใช้รูปแบบมาตรฐานบางอย่างกับสตริงวันที่ก่อนที่จะเก็บไว้ในฐานข้อมูล ในกรณีนี้en.wikipedia.org/wiki/ISO_8601
denis.solonenko

สำหรับวิธีแก้ปัญหาการทำงานที่เข้มงวดยิ่งขึ้นใน "string to date" สะดวกในการเพิ่ม "format.setLenient (false);" ก่อนที่จะลอง ... catch block ด้วยวิธีนี้การตรวจสอบวันที่ของสตริงที่ถูกต้องก่อนหน้านี้จะดีกว่า
Alecs

ฉันไม่เชื่อว่าSimpleDateFormat.format()มีข้อผิดพลาดเกิดขึ้น
คนอยู่ที่ไหนสักแห่งที่

2
ถ้าเวอร์ชัน SDK ของคุณมากกว่าหรือเท่ากับ Marshmallow ให้ใช้ดังนี้ 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
มันไม่ควรที่จะแยกสตริงเป็นตัวแปร? เพราะด้วยวิธีนี้มันจึงพยายามแยกคำว่า "string"
Marco

6

ใช้ SimpleDateFormat หรือคลาส DateFormat ผ่าน

สำหรับเช่น

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

ที่นี่เป็นวัตถุของคุณวันวันที่ และผลลัพธ์คือ:

พุธ 14 มี.ค. , 13:30:00 UTC 2018

14 มี.ค. 2018


ขอบคุณมาก!
Maryoomi1

1

มันอาจเป็นความคิดที่ดีที่จะระมัดระวังด้วย Locale ซึ่งc.getTime().toString();ขึ้นอยู่กับ

แนวคิดหนึ่งคือการเก็บเวลาเป็นวินาที (เช่นเวลา UNIX ) ในฐานะที่intคุณสามารถเปรียบเทียบมันได้อย่างง่ายดายแล้วคุณก็แปลงมันเป็นสตริงเมื่อแสดงมันให้กับผู้ใช้


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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.