Android 레코드 19 - 모멘트 동적 발표 시간 계산

Android 개발 기록 19 - 모멘트 동적 발표 시간 계산
전재: ITxiao 소 무,http://blog.csdn.net/wwj_748
앞의 글 은 여러분 에 게 시간 지식 에 대한 공 유 를 드 립 니 다.http://blog.csdn.net/wwj_748 / article / details / 11536421. 본 블 로그 에서 필자 가 공유 하고 자 하 는 일 은 Calendar 를 통 해 우리 가 평소에 필요 로 하 는 년, 월, 일, 시, 분, 초 등 을 계산 하고 친구 권 의 동태 적 인 발표 시간 을 어떻게 계산 하 는 지 계산 하고 자 합 니 다.
여기 서 여러분 이 알 아야 할 몇 가지 중요 한 유형:
달력 종류: 달력
날짜 클래스: Date
날짜 형식 클래스: SimpleDateFormat
기본적으로 우리 가 날짜 에 대한 일부 전환 은 모두 이 몇 가지 유형 에서 이 루어 진 것 으로 다음 과 같은 몇 가지 자주 사용 하 는 전환 이 있다.
Calendar 를 통 해 관련 날짜 정 보 를 얻 을 수 있 습 니 다. 예 를 들 어 현재 의 년 월 일, 작년 의 년 월 일, 다음 해 의 년 월 일 등 입 니 다. 여기 서 필자 가 사용자 정의 달력 에 관 한 박문 을 볼 수 있 고 관련 날짜 작업 유형 을 제공 합 니 다.http://blog.csdn.net/wwj_748/article/details/42244865
Date 와 Calendar 사이 의 전환
Date 와 날짜 문자열 의 상호 변환
우선 Calendar 를 사용 하여 원 하 는 날짜 정 보 를 얻 는 방법 을 알 아 보 겠 습 니 다.
현재 달력 가 져 오기:
Calendar calendar = Calendar.getInstance();

필드 에 따라 정 보 를 가 져 옵 니 다.
현재 년도 가 져 오기:
Calendar.getInstance().get(Calendar.YEAR)

현재 달 가 져 오기:
Calendar.getInstance().get(Calendar.MONTH) + 1

달 은 0 에서 시작 되 기 때문에 여기에 + 1 을 주의해 야 한다.
현재 달의 며칠 째 획득:
calendar.get(Calendar.DAY_OF_MONTH)

현재 시간 밀리초 표시 가 져 오기:
calendar.getTimeInMillis()

Calendar 는 연산 도 많이 할 수 있 습 니 다. 필 자 는 달력 컨트롤 을 개발 할 때 날짜 에 관 한 연산 을 많이 했 습 니 다.
Calendar 의 add 방법 을 통 해 지정 한 필드 를 연산 합 니 다. 예 를 들 어 다음 과 같 습 니 다.
//        
	public static int getLastYear() {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.YEAR, -1);
		return c.get(Calendar.YEAR);
	}
	
	//        
	public static int getNextYear() {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.YEAR, 1);
		return c.get(Calendar.YEAR);
	}
//          
	public static int getLastMonth() {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, -1);
		return c.get(Calendar.MONTH) + 1;
	}
	
	//          
	public static int getNextMonth() {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, 1);
		return c.get(Calendar.MONTH) + 1;
	}

Calendar 에 대해 서 는 아직 많은 필드 가 있 으 니 독자 들 이 API 를 보고 스스로 시도 하 기 를 바 랍 니 다.
Date 와 Calendar 사이 의 전환
저 희 는 Calendar 의 setTime 방법 을 호출 하여 시간 에 대응 하 는 달력 대상 을 설정 할 수 있 습 니 다.
calendar.setTime(new Date())

Date 와 날짜 문자열 의 상호 변환
실제 개발 에 서 는 서버 가 되 돌아 오 는 날짜 데 이 터 를 포맷 해 야 합 니 다. 여기 서 는 SimleDateFormat 을 사용 해 야 합 니 다. 날짜 형식 을 지정 할 수 있 습 니 다.
	private static SimpleDateFormat DATE_FORMAT_TILL_SECOND = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss");

날짜 문자열 을 받 았 습 니 다. Date 대상 으로 변환 할 수 있 습 니 다.
/**
	 *         Date
	 * @param dateStr
	 * @param format
	 * @return
	 */
	public static Date strToDate(String dateStr, String format) {
		Date date = null;

		if (!TextUtils.isEmpty(dateStr)) {
			DateFormat df = new SimpleDateFormat(format);
			try {
				date = df.parse(dateStr);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		return date;
	}
	

우리 가 가 져 온 Date 대상 을 지정 한 형식의 문자열 로 변환 할 수도 있 습 니 다.
/**
	 *         
	 * @param timeStr
	 * @param format
	 * @return
	 */
	public static String dateToString(String timeStr, String format) {
		//        
		Date date = DateHelper.strToDate(timeStr, format);
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		//        ,  “xx xx ”    
		if (calendar.get(Calendar.YEAR) == getYear()) {
			return DATE_FORMAT_TILL_DAY_CURRENT_YEAR.format(date);
		}
		
		return DATE_FORMAT_TILL_DAY_CH.format(date);
	}

마지막 으로 말 하고 자 하 는 것 은 개발 과정 에서 우 리 는 동태 적 인 발표 시간 을 계산 해 야 한 다 는 것 이다. 일반적으로 우 리 는 날짜 문자열 을 얻 었 다. 우 리 는 현재 시간 과 동태 적 인 발표 시간 을 계산 하고 그들의 차 이 를 계산 하여 발표 가 언제 인지, 코드 를 올 려 야 한다.
/**
	 *     
	 * @param dateStr      
	 * @return
	 */
	public static String timeLogic(String dateStr) {
		Calendar calendar = Calendar.getInstance();
		calendar.get(Calendar.DAY_OF_MONTH);
		long now = calendar.getTimeInMillis();
		Date date = strToDate(dateStr, DATE_FORMAT);
		calendar.setTime(date);
		long past = calendar.getTimeInMillis();
		
		//      
		long time = (now - past) / 1000;
		
		StringBuffer sb = new StringBuffer();
		if (time > 0 && time < 60) { // 1   
			return sb.append(time + "  ").toString();
		} else if (time > 60 && time < 3600) {
			return sb.append(time / 60+"   ").toString();
		} else if (time >= 3600 && time < 3600 * 24) {
			return sb.append(time / 3600 +"   ").toString();
		}else if (time >= 3600 * 24 && time < 3600 * 48) {
			return sb.append("  ").toString();
		}else if (time >= 3600 * 48 && time < 3600 * 72) {
			return sb.append("  ").toString();
		}else if (time >= 3600 * 72) {
			return dateToString(dateStr, DATE_FORMAT);
		}
		return dateToString(dateStr, DATE_FORMAT);
	}

효과 유사:
Android记录19-朋友圈动态发布时间计算_第1张图片
본 논문 의 기록 은 여기까지 입 니 다. 여기 서 한 가지 말씀 드 리 겠 습 니 다. 개발 과정 에서 우리 가 자주 만 나 는 지식 포 인 트 는 정리 하고 정리 할 수 있 습 니 다. 이동 하 는 제품 개발 은 택배 로 교체 해 야 합 니 다. 이런 개발 지식 포 인 트 를 기록 하 는 것 은 자신 에 게 큰 도움 이 되 고 자신의 개발 효율 을 향상 시 키 며 대응 하 는 능력 이 향상 되 고 임금 도 따라 올 라 갑 니 다.소 서 러 개인의 한 가지 관점, 인내심 을 가지 고 읽 어 주 셔 서 감사합니다.

좋은 웹페이지 즐겨찾기