Java의 인간 읽기 가능하고 파싱 가능한 날짜 형식
-
13-09-2019 - |
문제
날짜 개체를 읽을 수있는 문자열 (예 : 22/10/2009 21:13:14)에 저장하고 싶습니다.
나는 많은 것을 시도했고 내가 찾을 수있는 최선의 방법은 구문 분석 및 형성에 DateFormater를 사용하는 것이었지만 좌절이 있습니다. 날짜를 포맷하면 몇 초만 정보를 잃습니다. 나는 그것을 포맷하고 초를 표시하는 옵션이 있는지 찾으려고 노력했지만 (해상도가 당신이 허용하는 날짜가 있기 때문에 밀리 초 레벨에 더 나은 것도 더 나은 것도 더 나은 것입니다).
어떤 아이디어?
해결책
보세요 java.text.simpledateformat
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
Date dt = new Date();
String S = sdf.format(dt); // formats to 09/23/2009 13:53:28.238
Date dt2 = sdf.parse(S); // parses back
다른 팁
SimpleDateFormat
두 번째 및 밀리 초를 포함하는 매우 간단한 패턴 시스템을 기반으로 날짜를 형식화하고 구문 분석 할 수 있습니다.
다른 답변은 모두 좋습니다.
그러나 이런 종류의 일을 할 때 제발 형식을 선택하십시오 제대로 정렬합니다 문자열로 코딩 할 때 .... "yyyy/mm/dd hh : mm : ss"는 괜찮습니다. 소프트웨어 엔지니어가 명백하고 편리한 방식으로 정렬하지 않는 날짜 형식을 선택하면 항상 저를 놀라게합니다.
당신은 동료 개발자를 미래의 먼 지점에서 많은 고통을 저장할 것입니다 - 그것을 좋은 업장으로 생각하십시오 :-)
약간의 주제이지만, 나는 항상 사람들에게 dateformat 및 simpledateformat이 스레드 안전하지 않다는 것을 사람들에게 상기시켜야 할 필요성을 느낍니다! 태양 문서는 이것을 분명히 말하지만, 사람들이 정적으로 단순한 형태를 붙이는 야생에서 코드를 계속 찾고 있습니다 ...
ISO 8601
사용 ISO 8601 체재.
- 유연성이 뛰어나고 초의 초와 분수가 포함되어 있지만 0이면 남겨 두는 것도 포함됩니다.
- 표준이므로 점점 더 많은 도구 형식을 구문 분석하고 구문 분석합니다. 스토리지 또는 데이터 교환의 직렬화에 적합합니다.
- 그것은 비슷합니다
2009-10-22T21:13:14
, 나는 그것이 인간이 읽을 수 있다고 말해야한다 (그러나T
시간 부분의 시작을 나타내는 중간에는 처음에는 비정상적인 느낌이들 수 있습니다). - Mikera가 요청한 것처럼 문자열은 제대로 정렬됩니다 또 다른 대답, 연도가 1000-9999의 4 자리 범위에있는 한.
- 클래스
java.time
, Modern Java 날짜 및 시간 API뿐만 아니라 Joda Time의 기본값, 즉 명시 적 형성이없는 기본값으로 ISO 8601을 구문 분석하고 동일한 형식을 생산합니다.toString
행동 양식.
사용의 겸손한 데모 java.time
:
LocalDateTime dateTime = LocalDateTime.of(2009, 10, 22, 21, 13, 14);
String readableString = dateTime.toString();
System.out.println(readableString);
LocalDateTime parsedBack = LocalDateTime.parse(readableString);
System.out.println(parsedBack);
이것은 두 가지 동일한 줄을 인쇄합니다.
2009-10-22T21:13:14
2009-10-22T21:13:14
후자의 System.out.println()
호출은 암시 적으로 전화를받습니다 toString()
다시 한 번, 이것은 놀라지 않을 것입니다.
조금 더 간단하게하고 싶고 대부분의 다른 답변이 포함되는 자신의 DateFormat를 만들지 않으면 기본 형식을 활용할 수 있습니다. java.time.instant:
(new Date()).toInstant.toString();