2014-02-17 2 views
0

У меня возникли проблемы с попыткой использовать .setTime для объекта CalendarView, см. Код ниже.CalendarView.setTime issues

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: время не между Mon Jan 01 00:00:00 EST 1900 и Fri Dec 31 00:00:00 EST 2100

Blowing on view.setDate (selDate.getTime());

Я не совсем понимаю, почему selDate.getTime() не является допустимым долго view.setDate()

Любой?

ответ

0

При создании объекта Date его значение year - текущий год минус 1900 год. Это действительное значение для расчета количества миллисекунд, прошедших с 1 января 1970 года, 00:00:00. Когда вы изменяете year значение Date объекта по year из списка аргументов, эти миллисекунды выходят за пределы допустимого диапазона, потому что year в списке аргументов, всего лишь текущий год (без минуса 1900).

Вы должны заменить

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

с

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

+0

Хотя это работало, что самый лучший способ работы с датами в Java/Android? Предпочтительные объекты? –

+0

Лично я использую 'Date' и' Calendar' – mangusta