2014-02-17 3 views
0

CalendarView 개체에서 .setTime을 사용하는 데 문제가 있습니다. 아래 코드를 참조하십시오.CalendarView.setTime 문제

package com.example.calendar_test; 

import java.util.Calendar; 
import java.util.Date; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.text.format.DateFormat; 
import android.text.format.Time; 
import android.view.Menu; 
import android.view.View; 
import android.widget.CalendarView; 
import android.widget.Toast; 
import android.widget.CalendarView.OnDateChangeListener; 

public class MainActivity extends Activity { 
CalendarView cv; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    long startDate; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    cv = (CalendarView) this.findViewById(android.R.id.content).findViewById(R.id.calendarView1); 
    startDate = cv.getDate(); 
    cv.setDate(cv.getDate()); 
    final Context context = this; 

    cv.setOnDateChangeListener(new OnDateChangeListener(){ 
     public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) { 
      Date selDate = new Date(); 
      selDate.setMonth(month); 
      selDate.setYear(year); 
      selDate.setDate(dayOfMonth); 
      selDate.setTime(selDate.getTime()); 

      view.setDate(selDate.getTime()); 

      Date d = new Date(); 
      d.setMonth(2); 
      d.setYear(2014); 
      d.setDate(22); 
      d.setTime(d.getTime()); 

      if(view.getDate() == d.getTime()){ 
       Toast.makeText(context, "You hit the 22", Toast.LENGTH_SHORT).show(); 

      } 

     } 

    }); 

} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 



} 

실행하면 날짜를 선택할 때이 메시지가 나타납니다. 02-17 15 : 50 : 30.501 : E/MessageQueue-JNI (1098) : java.lang.IllegalArgumentException : 월요일 Jan 01 00:00:00 EST 1900에서 Fri Dec 31 00:00:00 EST 2100

사이의 시간이 아님

view.setDate (selDate.getTime())에서 블로잉하는 중; selDate.getTime()가 view.setDate()

누군가를 위해 유효한 길이 아닌 이유

꽤 이해가 안 돼요?

답변

0

Date 개체를 만들 때 해당 year 값은 현재 연도에서 1900을 뺀 값입니다. 1970 년 1 월 1 일 00:00:00 이후 경과 된 밀리 초를 계산할 때 유효한 값입니다. 인수리스트에서 yearDateyear으로 수정하면 해당 인수가 year이고 현재의 연도 (빼기 1900)가 아니기 때문에 밀리 초가 범위를 벗어납니다. 이 일을하는 동안

당신은

selDate.setYear(year-1900);selDate.setYear(114);

+0

selDate.setYear(year);selDate.setYear(2014);

를 교체해야합니다, 자바/안드로이드에서 날짜와 함께 작동하는 가장 좋은 방법은 무엇인가? 선호하는 물건? –

+0

개인적으로 저는'Date'와'Calendar'를 사용합니다. – mangusta