SimpleDateFormat을 사용하여 문자열을 날짜로 변환하는 방법은 무엇입니까?
이 코드 스 니펫이 있습니다.
DateFormat formatter1;
formatter1 = new SimpleDateFormat("mm/DD/yyyy");
System.out.println((Date)formatter1.parse("08/16/2011"));
이것을 실행하면 다음과 같이 출력됩니다.
Sun Jan 16 00:10:00 IST 2011
기대했다:
Tue Aug 16 "Whatever Time" IST 2011
나는 내가 예상 한 달을 얻지 못한다고 말하고 싶다. 실수는 무엇입니까?
이 시도:
new SimpleDateFormat("MM/dd/yyyy")
MM
"month"(아님mm
)dd
"일"(아님DD
)
SimpleDateFormat에 대한 모든 것은 javadoc에 있습니다.
참고로, 형식이 여전히 유효한 날짜 형식 인 이유는 다음과 같습니다.
mm
"분"입니다DD
"연중 하루"입니다.
에 또한, 당신은 캐스트가 필요하지 않습니다 Date
이미 ... 이다 a가 Date
(또는 폭발) :
public static void main(String[] args) throws ParseException {
System.out.println(new SimpleDateFormat("MM/dd/yyyy").parse("08/16/2011"));
}
산출:
Tue Aug 16 00:00:00 EST 2011
짜잔!
m-min M-개월
Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
아래 기능 사용
/**
* Format a time from a given format to given target format
*
* @param inputFormat
* @param inputTimeStamp
* @param outputFormat
* @return
* @throws ParseException
*/
private static String TimeStampConverter(final String inputFormat,
String inputTimeStamp, final String outputFormat)
throws ParseException {
return new SimpleDateFormat(outputFormat).format(new SimpleDateFormat(
inputFormat).parse(inputTimeStamp));
}
샘플 사용법은 다음과 같습니다.
try {
String inputTimeStamp = "08/16/2011";
final String inputFormat = "MM/dd/yyyy";
final String outputFormat = "EEE MMM dd HH:mm:ss z yyyy";
System.out.println(TimeStampConverter(inputFormat, inputTimeStamp,
outputFormat));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String newstr = "08/16/2011";
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat format = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy");
Calendar c = Calendar.getInstance();
c.setTime(format1.parse(newstr));
System.out.println(format.format(c.getTime()));
아주 간단한 예입니다.
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
Date date1 = new Date();
try {
System.out.println("Date1: "+date1);
System.out.println("date" + date);
date = simpleDateFormat.parse("01-01-2013");
date1 = simpleDateFormat.parse("06-15-2013");
System.out.println("Date1 is:"+date1);
System.out.println("date" + date);
} catch (Exception e) {
System.out.println(e.getMessage());
}
이 코드 조각은 앞뒤로 변환하는 데 도움이됩니다.
System.out.println("Date: "+ String.valueOf(new Date()));
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String stringdate = dt.format(new Date());
System.out.println("String.valueOf(date): "+stringdate);
try {
Date date = dt.parse(stringdate);
System.out.println("parse date: "+ String.valueOf(date));
} catch (ParseException e) {
e.printStackTrace();
}
you can solve the problem much simple like First convert the the given string to the date object eg:
java.util.Date date1 = new Date("11/19/2015");
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd yyyy HH:mma");
String format = formatter.format(date);
System.out.println(format);
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");
System.out.println(LocalDate.parse("08/16/2011", dateFormatter));
Output:
2011-08-16
I am contributing the modern answer. The answer by Bohemian is correct and was a good answer when it was written 6 years ago. Now the notoriously troublesome SimpleDateFormat
class is long outdated and we have so much better in java.time
, the modern Java date and time API. I warmly recommend you use this instead of the old date-time classes.
What went wrong in your code?
When I parse 08/16/2011
using your snippet, I get Sun Jan 16 00:08:00 CET 2011
. Since lowercase mm
is for minutes, I get 00:08:00
(8 minutes past midnight), and since uppercase DD
is for day of year, I get 16 January.
In java.time
too format pattern strings are case sensitive, and we needed to use uppercase MM
for month and lowercase dd for day of month.
Question: Can I use java.time with my Java version?
Yes, java.time
works nicely on Java 6 and later and on both older and newer Android devices.
- In Java 8 and later and on new Android devices (from API level 26, I’m told) the modern API comes built-in.
- In Java 6 and 7 get the ThreeTen Backport, the backport of the new classes (ThreeTen for JSR 310; see the links at the bottom).
- On (older) Android use the Android edition of ThreeTen Backport. It’s called ThreeTenABP. And make sure you import the date and time classes from
org.threeten.bp
with subpackages.
Links
- Oracle tutorial: Date Time explaining how to use
java.time
. - Java Specification Request (JSR) 310, where
java.time
was first described. - ThreeTen Backport project, the backport of
java.time
to Java 6 and 7 (ThreeTen for JSR-310). - ThreeTenABP, Android edition of ThreeTen Backport
- Question: How to use ThreeTenABP in Android Project, with a very thorough explanation.
String localFormat = android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d");
return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight);
will return a format based on device's language. Note that getBestDateTimePattern() returns "the best possible localized form of the given skeleton for the given locale"
You have used some type errors. If you want to set 08/16/2011 to following pattern. It is wrong because,
mm stands for minutes, use MM as it is for Months
DD is wrong, it should be dd which represents Days
Try this to achieve the output you want to get ( Tue Aug 16 "Whatever Time" IST 2011
),
String date = "08/16/2011"; //input date as String
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy"); // date pattern
Date myDate = simpleDateFormat.parse(date); // returns date object
System.out.println(myDate); //outputs: Tue Aug 16 00:00:00 IST 2011
참고URL : https://stackoverflow.com/questions/9872419/how-to-convert-a-string-to-a-date-using-simpledateformat
'programing' 카테고리의 다른 글
일반 목록 (0) | 2020.11.26 |
---|---|
현재 메서드의 이름을 가져옵니다. (0) | 2020.11.26 |
트렁크에서 분기로 SVN 전환 (0) | 2020.11.26 |
Angular2 코드의 TypeScript 오류 : '모듈'이름을 찾을 수 없습니다. (0) | 2020.11.26 |
페이지로드시 입력 필드와 그 안의 텍스트를 자동으로 선택하는 방법 (0) | 2020.11.26 |