Android 프로젝트에서 스페인어 로케일 (SimpleDateFormat
)을 사용하여 날짜 문자열을 파싱했는데 어떤 이상한 이유로 인해 ParseException
은 9 월을 날짜로 사용했습니다. 달. 왜이 문제가 발생했는지 알지 못해이 버그를 재연하기 위해이 예외를 던지는 날짜 문자열을 사용하여 Eclipse에서 장난감 프로그램을 작성하기로 결정했습니다. 놀랍게도 예외는 발생하지 않았고 날짜는 정확하게 파싱되었습니다.Android 프로젝트에서 java.text.simpledateform이 다르게 동작합니다.
제 질문은 : 첫 번째 코드 블록 (jdk 1.8_25 포함)이 ParseException
을 던지지 않는 이유는 두 번째 코드 블록 (빈 Android Studio 애플리케이션에서 SDK 21 rev.2 및 Build -Tools 21.1.2)는 ParseException
을 던집니까? 다른 누구도이 이상한 행동을 재현 할 수 있습니까? 내가 도대체 뭘 잘못하고있는 겁니까? 두 경우 모두 문자열을 날짜로 정확하게 파싱해서는 안됩니까?
코드 # 1 (JDK 1.8_25) :
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
private static final String THIS_YEAR_TIME_FORMAT = "d 'de' MMM, HH:mm";
private static final DateFormat THIS_YEAR_TIME_FORMATTER = new SimpleDateFormat(THIS_YEAR_TIME_FORMAT,
new Locale("es", "ES"));
public static void main(String[] args) {
final String problemStr = "3 de sep, 22:50";
Date time;
try {
time = THIS_YEAR_TIME_FORMATTER.parse(problemStr);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
코드 # 2 (안드로이드 SDK 21 계 2:13, 빌드 - 도구 21.1.2) :
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class MainActivity extends ActionBarActivity {
private static final String THIS_YEAR_TIME_FORMAT = "d 'de' MMM, HH:mm";
private static final DateFormat THIS_YEAR_TIME_FORMATTER = new SimpleDateFormat(THIS_YEAR_TIME_FORMAT,
new Locale("es", "ES"));
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String problemStr = "3 de sep, 22:50";
Date time;
try {
time = THIS_YEAR_TIME_FORMATTER.parse(problemStr);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
조사 해 주셔서 감사합니다. 이것에 대해 어떻게 알았습니까? // 'sep'가 9 월에 항상 파싱되도록하려면 'sept'가 아닌 'sep'가 필요합니다. 어디에서나 사용할 수 있도록'SimpleDateFormat'으로 이것을 어떻게 보장 할 수 있습니까? – hallaplay835
@ hallaplay835 꽤 많은 인터넷 검색과 독서가 있었지만 CLDR은 확실히 데이터를 쉽게 이해할 수 없습니다. 어디서나 작동하도록하는 한 가지 방법은'ParseException'을 잡아서 "sep"를 "sept"로 바꾸는 것입니다. 문자열에서 다시 시도하십시오. 그것은 못생긴 해결책이지만, 더 나은 방법으로 이것을 달성하는 방법에 대한 문서를 보지 못했습니다. – Kai