Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将一个月添加为毫秒?_Java_Android_Firebase_Milliseconds_Date - Fatal编程技术网

Java 如何将一个月添加为毫秒?

Java 如何将一个月添加为毫秒?,java,android,firebase,milliseconds,date,Java,Android,Firebase,Milliseconds,Date,我无法将当前时间更改为毫秒,即设置日期和时间前一个月显示的毫秒。我知道计算机从0开始工作,我怎样才能解决这个问题?首先,我将日期和时间转换为字符串,然后我将字符串转换为SimpleDataFormat中的日期,然后我将日期转换为长 例如:当用户输入日期“2018/2/14 11:18”(AM)时,转换为long的日期为“1515899940000” 这是我的密码: private void setDateField() { Calendar c = Calendar.getInsta

我无法将当前时间更改为毫秒,即设置日期和时间前一个月显示的毫秒。我知道计算机从0开始工作,我怎样才能解决这个问题?首先,我将日期和时间转换为
字符串
,然后我将
字符串
转换为
SimpleDataFormat
中的日期,然后我将日期转换为

例如:当用户输入日期“2018/2/14 11:18”(AM)时,转换为long的日期为“1515899940000”

这是我的密码:

private void  setDateField() {

    Calendar c = Calendar.getInstance();

    int yy = c.get(Calendar.YEAR);
    int mm = c.get(Calendar.MONTH);
    int dd = c.get(Calendar.DAY_OF_MONTH);

    c.set(Calendar.MONTH, mm);
    c.set(Calendar.DAY_OF_MONTH, dd);
    c.set(Calendar.YEAR, yy);

    DatePickerDialog datePickerDialog = new DatePickerDialog(this,android.R.style.Theme_Holo_Light_Dialog ,new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDate) {

            year = selectedYear;
            month = selectedMonth;
            day = selectedDate;
            date_time = year + "/" + (month + 1) + "/" + day;
            timePicker();
        }
    },year, month, day);

    datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
    datePickerDialog.show();

}

private void timePicker(){
    // Get Current Time
    final Calendar c = Calendar.getInstance();
    hours = c.get(Calendar.HOUR_OF_DAY);
    minutes = c.get(Calendar.MINUTE);
    // Launch Time Picker Dialog
    TimePickerDialog timePickerDialog = new TimePickerDialog(this,android.R.style.Theme_Holo_Light_Dialog,new TimePickerDialog.OnTimeSetListener() {

                @Override
                public void onTimeSet(TimePicker view, int hourOfDay,int minute) {

                    hours = hourOfDay;
                    minutes = minute;
                    string_date = date_time+" "+format(hours) + ":" +format(minutes) ;
                    addtime.setText(string_date);
                    Log.e("JEJEJEJE",string_date);

                    SimpleDateFormat f = new SimpleDateFormat("yyyy/mm/dd HH:mm");
                    try {
                        Date d = f.parse(string_date);
                        milliseconds = d.getTime();
                        Log.e("LONGGGGGGG", String.valueOf(milliseconds));
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
            }, hours, minutes, true);
    timePickerDialog.show();

}


Calendar
object为我们提供了方法,例如
getTimeInMillis()
add(int字段,int金额)
。添加看起来像是添加(Calendar.MONTH,1)我建议:首先,不要使用变量(字段?
小时
分钟
,只需声明

private LocalDate date;
private LocalTime time;
private long milliseconds;
(保留
毫秒
变量,因为您希望在此处获得结果。)

onDateSet
中,通过以下方式为
date
指定一个值:

        date = LocalDate.of(selectedYear, selectedMonth + 1, selectedDate);
正如您所说,这就是我们考虑的地方,日期选择器的
selectedMonth
是基于0的,而
LocalDate
是以人类的方式从1开始计算月份的

现在,您的
时间选择器
方法变为

private void timePicker(){
    // Get Current Time
    time = LocalTime.now(ZoneId.systemDefault());
    // Launch Time Picker Dialog
    TimePickerDialog timePickerDialog = new TimePickerDialog(this,
            android.R.style.Theme_Holo_Light_Dialog,
            new TimePickerDialog.OnTimeSetListener() {

                @Override
                public void onTimeSet(TimePicker view, int hourOfDay,int minute) {

                    time = LocalTime.of(hourOfDay, minute);

                    milliseconds = date.atTime(time)
                            .atZone(ZoneId.systemDefault())
                            .toInstant()
                            .toEpochMilli();
                    Log.e("LONGGGGGGG", String.valueOf(milliseconds));
                }
            },
            time.getHour(),
            time.getMinute(),
            true);
    timePickerDialog.show();

}
你把事情搞得太复杂了。我建议:

  • 不要在业务逻辑中使用日期或时间字符串,请使用日期和时间对象。这也意味着您不需要像
    SimpleDateFormat
    这样的格式化程序(我可以补充一点,这是出了名的麻烦,所以最好不用它)
  • 使用
    java.time
    ,现代java日期和时间API。它比老式的日期和时间类(如
    Calendar
    )要好得多
  • 这两点在上面的代码片段中齐头并进。另外,据我所知,您对
    setDateField
    中的
    Calendar
    对象(
    c
    )没有任何用处,只需将其删除并使用它即可

    你的代码出了什么问题? 罪魁祸首是你的
    SimpleDateFormat
    。试着像这样使用它:

        SimpleDateFormat f = new SimpleDateFormat("yyyy/mm/dd HH:mm");
        System.out.println(f.parse("2018/04/17 12:45"));
    
    在我的电脑上这张照片

    Wed Jan 17 12:45:00 CET 2018
    
    无论字符串中有什么内容,它都会在1月份打印日期。这是因为您尝试了一个月的小写
    mm
    mm
    表示分钟(您也正确使用了分钟),month是大写的
    mm
    。因此,格式化程序根本无法解析月份,并将日期指定为默认月份,即一年中的第一个月,一月。当然,一月的这一天也是你千禧年价值观的体现

    问题:我可以在Android上使用
    java.time
    ? 是的,你可以在Android上使用
    java.time
    。使用它只需要Java6

    • 在Java8及更高版本和更新的Android版本中,新的API是内置的
    • 在Java6和Java7中,获取三个后端口,即现代类的后端口(三个用于JSR310,现代API是在这里首次描述的)
    • 在较旧的Android上,使用Android版本的ThreeTen Backport。它叫ThreeTenABP。确保从package
      org.threeten.bp
      和子package导入日期和时间类
    链接
    • ,解释如何使用
      java.time
    • ,Android版Three Ten Backport
    • ,解释得非常透彻

    我已经添加了它,但当我想让用户选择时间时,它会在当前时间后一个月开始。我不确定您想做什么。你想把时间加在哪一天?对不起,我不清楚。你能准确地说明期望的结果以及观察到的结果和期望结果之间的差异吗?也可能有帮助。可能是的副本。和考虑。考虑扔掉长期过时和臭名昭著的麻烦代码< SimpleDateFormat >代码>和朋友,并添加到Android项目中,以便使用<代码> java.时间>代码>,java java日期和时间API。和你一起工作真是太好了。你查过我链接的月刊问题了吗?当我说我认为他们会对你有帮助时,我是认真的。