Java에서 문자열을 캘린더 개체로 변환
저는 Java에 익숙하지 않습니다.보통 PHP로 작업합니다.
이 문자열을 변환하려고 합니다.
2011년 3월 14일 (월) 16:02:37 GMT
다음과 같이 년과 달을 쉽게 가져올 수 있도록 달력 개체로:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
수동으로 해석하는 것이 좋지 않을까요?서브스트링 방식 사용?
어떤 조언이라도 고마워!
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done
: "set ": "Locale
참고 항목
dr;dr
최신 접근법에서는 java.time 클래스를 사용합니다.
YearMonth.from(
ZonedDateTime.parse(
"Mon Mar 14 16:02:37 GMT 2011" ,
DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
)
).toString()
2011-03
레거시 날짜/시간 클래스 사용 안 함
현대적인 방법은 java.time 클래스를 사용하는 것입니다.다음과 같은 이전 날짜 시간 클래스Calendar
설계가 서툴고 혼란스러우며 번거롭다는 것이 증명되었습니다.
문자열 입력과 일치하는 커스텀포메터를 정의합니다.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
「 」로서 ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
을 사용법java에는 java.time이 포함됩니다.YearMonth
수업할 수 있습니다.
YearMonth ym = YearMonth.from( zdt );
필요한 경우 년도와 월 번호를 조회할 수 있습니다.
int year = ym.getYear();
int month = ym.getMonthValue();
그...toString
method는 표준 ISO 8601 형식의 문자열을 생성합니다.
String output = ym.toString();
이걸 다 합치세요.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();
콘솔에 덤프합니다.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
입력: 2011년 3월 14일 (월) 16:02:37 GMT
zdt: 2011-03-14T16:02:37Z[GMT]
ym: 2011-03
라이브 코드
IdeOne.com 에서 실행되고 있는 이 코드를 참조해 주세요.
변환
필요한 경우Calendar
오브젝트에서는 오래된 클래스에 추가된 새로운 메서드를 사용하여로 변환할 수 있습니다.
GregorianCalendar gc = GregorianCalendar.from( zdt );
java.time 정보
java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.
자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.
현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.
java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후에 준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*
반.휴지 상태 5 및 JPA 2.2는 java.time을 지원합니다.
java.time 클래스는 어디서 얻을 수 있습니까?
- Java SE 8, Java SE 9, Java SE 10, Java SE 11 및 이후 - 표준 Java API의 일부이며 번들 구현이 포함되어 있습니다.
- 자바 9는 몇 가지 사소한 기능과 수정을 제공했습니다.
- 자바 SE 6 및 자바 SE 7
- java.time 기능의 대부분은 ThreeTen 백포트의 Java 6 및7로 백포트됩니다.
- 안드로이드
와 같은 수업에서 이미 존재하는 코드를 복제하는 것은 좋지 않다고 생각합니다.
다른 한편으로, 저는 개인적으로 피하기를 권합니다.Calendar
그리고.Date
Joda Time을 훨씬 더 잘 설계된 날짜와 시간 API로 사용할 수 있습니다.예를 들어 다음과 같은 점에 유의해야 합니다.SimpleDateFormat
는 스레드 세이프가 아니기 때문에 사용할 때마다 스레드 스위칭, 동기화 또는 새로운 인스턴스가 필요합니다.Joda 파서와 포맷터는 스레드 세이프입니다.
새 달력을 만들 필요가 없습니다. SimpleDateFormat은 이미 아래에 달력을 사용하고 있습니다.
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.EN_US);
Date date = sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done
Calendar cal = sdf.getCalendar();
(아직은 코멘트를 할 수 없기 때문에 새로운 답변을 작성했습니다.)
SimpleDateFormat
좋아요, 주의하세요.HH
와는 다르다hh
작업 시간을 단축할 수 있습니다. HH
는 24시간 기준으로 반환되고 hh는 12시간 기준으로 반환됩니다.
예를 들어, 다음 명령어는 12시간의 시간을 반환합니다.
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");
24시간이 반환됩니다.
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
시간대를 사용하여 시간을 해석합니다.Z
패턴은 시간대를 위한 것입니다.
String aTime = "2017-10-25T11:39:00+09:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
try {
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(aTime));
Log.i(TAG, "time = " + cal.getTimeInMillis());
} catch (ParseException e) {
e.printStackTrace();
}
출력: UTC 시간을 반환합니다.
1508899140000
시간대를 다음과 같은 패턴으로 설정하지 않으면yyyy-MM-dd'T'HH:mm:ss
.SimpleDateFormat
에 설정된 타임존을 사용합니다.Setting
네, 직접 해석하는 것은 좋지 않은 관행입니다.SimpleDateFormat을 보면 문자열이 날짜로 바뀌고 날짜를 캘린더 인스턴스로 설정할 수 있습니다.
간단한 방법:
public Calendar stringToCalendar(String date, String pattern) throws ParseException {
String DEFAULT_LOCALE_NAME = "pt";
String DEFAULT_COUNTRY = "BR";
Locale DEFAULT_LOCALE = new Locale(DEFAULT_LOCALE_NAME, DEFAULT_COUNTRY);
SimpleDateFormat format = new SimpleDateFormat(pattern, LocaleUtils.DEFAULT_LOCALE);
Date d = format.parse(date);
Calendar c = getCalendar();
c.setTime(d);
return c;
}
언급URL : https://stackoverflow.com/questions/5301226/convert-string-to-calendar-object-in-java
'programing' 카테고리의 다른 글
Vue JS Quasar 프레임워크 전환 렌더링과 라우터 뷰의 충돌 (0) | 2022.08.13 |
---|---|
U 접미사의 의미 (0) | 2022.08.13 |
vue.js 2에서 v-if를 사용하는 것과 v-show를 사용하는 것 중 어떤 것이 더 좋습니까? (0) | 2022.08.13 |
Vue.js NPM 패키지를 Vuex 모듈과 함께 게시하는 방법 (0) | 2022.08.13 |
Vue 2에서 소품을 기반으로 다이내믹 태그를 작성하는 방법 (0) | 2022.08.13 |