0

我在尝试在 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: 时间不在美国东部标准时间 1900 年 1 月 1 日星期一 00:00:00 和 2100 年 12 月 31 日星期五 00:00:00 之间

炸毁 view.setDate(selDate.getTime());

我不太明白为什么 selDate.getTime() 对于 view.setDate() 来说不是有效的 long

任何人?

4

1 回答 1

0

创建Date对象时,其year值为当年减去 1900。这是计算自 1970 年 1 月 1 日 00:00:00 以来经过的毫秒数的有效值。当您通过参数列表修改对象的year值时,这些毫秒超出范围,因为参数列表中的毫秒数只是当前年份(不包括负 1900)。Dateyearyear

你应该更换

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

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

于 2014-02-18T02:08:50.697 回答