안드로이드, 문자열을 날짜로 어떻게 변환합니까?


142

사용자가 응용 프로그램을 시작할 때마다 데이터베이스에 현재 시간을 저장합니다.

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

데이터베이스 측에서 현재 시간을 문자열로 저장합니다 (위의 코드에서 볼 수 있듯이). 따라서 데이터베이스에서로드 할 때 Date 객체로 캐스팅해야합니다. 나는 그들 모두가 "DateFormat"을 사용한 샘플들을 보았다. 그러나 내 형식은 날짜 형식과 정확히 동일합니다. 따라서 "DateFormat"을 사용할 필요가 없다고 생각합니다. 내가 맞아?

어쨌든이 String을 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 2018

"string to date"에 대해보다 엄격하게 작동하는 솔루션의 경우 "format.setLenient (false);"를 추가하는 것이 편리합니다. try ... catch 블록 전에 이런 식으로 이전에 올바른 문자열 날짜를 확인하는 것이 좋습니다.
Alecs

나는이 믿지 않는 SimpleDateFormat.format()예외가 발생합니다
누군가 어딘가에

2
산들로 SDK 버전 크거나 같은 다음과 같이 사용하는 경우 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();
         }
    }
    }

다음은 Date 객체 날짜 이며 출력은 다음과 같습니다.

수 3 월 14 일 13:30:00 UTC 2018

2018 년 3 월 14 일


정말 고맙습니다!
Maryoomi1

1

로케일에 c.getTime().toString();따라 주의를 기울이는 것이 좋습니다 .

한 가지 아이디어는 시간을 초 단위로 저장하는 것입니다 (예 : UNIX 시간 ). AS를 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.