검색결과 리스트
전체 글에 해당되는 글 8건
- 2020.06.18 쉘 환경 언어 변경
- 2017.05.02 날짜 정규화
- 2017.04.28 뷰 스와이프 영역 겹침 문제
- 2017.04.28 GPS 설정 액티비티 호출
글
쉘 환경 언어 변경
쉘 환경 언어 변경
로케일
로케일은 사용자의 언어, 국가뿐 아니라 사용자 인터페이스에서 사용자가 선호하는 사항을 지정한 매개 변수의 모임이다
로케일의 변경은 표시 언어, 숫자 형식, 날짜/시간 형식, 시간대, 일광 절약 시간, 통화 형식등 많은 것을 포함한다
아래와 같이 로케일의 변경에 따라 출력 양식이 달라짐을 알 수 있다
$ export LANG=en_US.UTF-8
$ date
Thu, Jun 18, 2020 9:26:57 PM
$ export LANG=ko_KR.UTF-8
$ date
2020년 06년 18일 목 오후 9:27:16
LANG 환경 변수
LANG 환경변수(environment variable)를 출력해보면 로케일(locale)과 문자셋(character set) 방식을 알 수 있다
언어를 변경하기 위해서는 export 명령어로 LANG 환경변수를 설정해준다. 값의 의미는 간단히 language_COUNTRY.ENCODING 형식으로 순서대로 언어, 지역, 인코딩을 의미한다
$ echo $LANG
ko_KR.UTF-8
$ export LANG=en_US.UTF-8
- echo
-
유닉스 계열 운영체제에서 문자열을 터미널(terminal)에 반향(echo)하는 명령어이다. 일반적으로 쉘 스크립트와 배치 파일에서 화면이나 파일로 상황을 알리는 문자열을 출력할때 사용한다
- export
-
환경변수를 설정한다
export 명령어를 이용한 로케일/문자셋 변경은 일시적으로 계속적인 적용을 하기 위해서는 배치 파일에 기록해야한다
$ cat ~/.bash_profile
export LANG=ko_KR.utf8
시스템 로케일 변경
이 부분은 더 나은 설명을 하는 블로그가 있어 링크를 겁니다
joinc 블로그, Locale
글
날짜 정규화
MPAndroidChart 차트 라이브러리를 사용하면서 일별 데이터를 출력해야했는데
데이터베이스에 System.currentTimeMillis()로 얻어지는 UTC(세계 협정시)를 그대로 저장했기에
x축으로 그대로 사용할 수 없었고 간격이 1일이 되는 날짜로 정규화할 필요성이 있었다
(별도의 정규화가 필요한 이유는 20170517 과 같은 단순히 년/월/일을 직접 조합한 값을 사용하게 되면 년과 월의 경계에서 숫자가 크게 변하게 되어 이 값을 일정한 간격으로 증가해야하는 차트의 x축 값으로 사용하기에 적절하지 않기 때문이다)
처음엔 당연한듯 하루의 밀리초에 해당되는 (1000 * 60 * 60 * 24)로 나누어 정규화했지만
오차가 발생하였고 웹서칭으로 알아보니 지역별 TimeZone을 고려하지 않았서 생긴 문제였다
1 2 3 4 5 | long t1 = 1493548835119; // 2017-04-30 19:40:35.119 long t2 = 1493548835119; // 2017-05-01 00:39:56.124 System.printf("" + (t1 / (1000 * 60 * 60 * 24)); // 17286 = 2017-04-30 System.printf("" + (t2 / (1000 * 60 * 60 * 24)); // 17286 = 2017-04-30 | cs |
결론적으로 한국은 UTC/GMT +9 이고
하루의 시간으로 나누어 시간 부분을 잘라내기전에 +9시간을 더해주어야 한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | long utcToDates(long timeMillis) { // utc를 입력 받아서 날수를 계산 // TimeZone을 고려하지 않고 그냥 하루의 시간으로 나누게 되면 지역별 시간차에 의해 최대 1일의 오차가 발생 return (timeMillis + Calendar.getInstance().get(Calendar.ZONE_OFFSET)) / (1000 * 60 * 60 * 24); } long datesToUtc(long dates) { return dates * (1000 * 60 * 60 * 24); } public String getFormattedDate(long value) { String strDate; Date mDate = new Date(); Canendar mCalendar = Calendar.getInstance(); mDate.setTime(datesToUtc(value)); mCalendar.setTime(mDate); strDate = "" + mCalendar.get(Calendar.YEAR) + "-" + (mCalendar.get(Calendar.MONTH) + 1) + "-" + mCalendar.get(Calendar.DATE); return strDate; } | cs |
'Android' 카테고리의 다른 글
뷰 스와이프 영역 겹침 문제 (0) | 2017.04.28 |
---|---|
GPS 설정 액티비티 호출 (0) | 2017.04.28 |
글
뷰 스와이프 영역 겹침 문제
적절한 제목인지는 잘 모르겠습니다
ViewPager 내부에 네이버 맵 프래그먼트가 속해있는 구조에서
네이버 맵 영역에서 좌우로 패닝(손가락을 때지 않고 움직임)시에
동작이 네이버 맵에 전달되지 않고 ViewPager에 의해 가로채어져 좌우로 페이지가 넘어가는 문제가 있었습니다
이렇게 동작 영역이 겹칠때에는 어느 한쪽은 마땅히 포기해야하는것이 자연스럽겠죠?
웹서칭을 해보았으나 대부분 ViewPager 클래스를 상속 받아서 기능을 무력화 시키는 코드가 많이 보였습니다
단지 이것을 위해 상속 받아야 한다면 파리를 잡기 위해 대포를 쏘는 격 같은데요
터치 이벤트 관련해서 여러 자료를 읽은 후에 다음과 같이 해결할 수 있었습니다
1 2 3 4 5 | @Override public boolean dispatchTouchEvent(MotionEvent ev) { viewPager.requestDisallowInterceptTouchEvent(true); return super.dispatchTouchEvent(ev); } | cs |
'Android' 카테고리의 다른 글
날짜 정규화 (0) | 2017.05.02 |
---|---|
GPS 설정 액티비티 호출 (0) | 2017.04.28 |
글
GPS 설정 액티비티 호출
1 | <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> | cs |
1 2 3 4 5 | LocationManager locMan = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE); if (locMan.isProviderEnabled("gps") == false) { Toast.makeText(getContext(), "GPS 기능을 필요로 합니다.", Toast.LENGTH_LONG).show(); startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); } | cs |
'Android' 카테고리의 다른 글
날짜 정규화 (0) | 2017.05.02 |
---|---|
뷰 스와이프 영역 겹침 문제 (0) | 2017.04.28 |