比Android

时间:2017-01-05 14:09:09

标签: android date datetime calendar

我有一个从DatePickerDialog的onDateSetListener调用的TimePickerDialog,以便允许用户一个接一个地选择日期和时间。我将信息存储在Calendar对象calendar中。用户完成后,单击以将此信息和其他信息保存在数据库中。节省时间的相关部分就在这里

call.setContactTimestamp(new DateTime(calendar.getTimeInMillis()));

setContactTimestamp()将org.joda.time.DateTime对象保存到表中。这一切似乎都很好。然后,我稍后使用此相关代码将此(和其他)数据显示给用户 TextView dateTime = (TextView) tableRow.findViewById(R.id.date_time); dateTime.setText(sdf.format(calls.get(i).getContactTimestamp().getMillis()));

其中sdf是一个看起来像SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a", Locale.US);

的SimpleDateFormat

问题:显示的时间总是比本地时间晚6个小时和设备上显示的时间。我已经跟踪了断点,在数据保存之前我真正感到困惑的是,我评估sdf.format(calendar.getTimeInMillis())并显示准确的时间。当我拉回信息时,毫秒关闭。

示例:我打开了我的Date / TimePickerDialogs,它选择了当前的日期和时间,2017年1月5日上午8:47:36。我点击保存它,并在上面显示的save语句中进行评估。 new DateTime(calendar.getTimeInMillis())评估为2017-01-05T08:47:36.322-06:001483627656322毫秒。 然后我提取信息进行显示,返回的joda.time.DateTime评估为2017-01-05T08:47:36.000Z 1483606056000毫秒,比我在凌晨2:47:36保存的时间落后6小时。

这是我的DatePickerDialog和TimePickerDialog,如果它是相关的。如果我遗漏了你认为很重要的事情请告诉我,我会补充一下。

DatePickerDialog dpd = new DatePickerDialog();
dpd.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePickerDialog dialog, int year, int monthOfYear, int dayOfMonth) {
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, monthOfYear);
        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        TimePickerDialog tpd = new TimePickerDialog();
        tpd.setOnTimeSetListener(new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
                calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                calendar.set(Calendar.MINUTE, minute);
                callDateTime.setText(sdf.format(calendar.getTime()));
            }
        });
        tpd.show(getActivity().getFragmentManager(), "tdp");
    }
});
dpd.show(getActivity().getFragmentManager(), "dpd"); 

1 个答案:

答案 0 :(得分:0)

尝试更改

discrete_distribution<int> weights ( temp_weights.begin(), temp_weights.end() );

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a", Locale.US);

可以帮助你!