Java 如何将一个月添加为毫秒?
我无法将当前时间更改为毫秒,即设置日期和时间前一个月显示的毫秒。我知道计算机从0开始工作,我怎样才能解决这个问题?首先,我将日期和时间转换为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
字符串
,然后我将字符串
转换为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
和子package导入日期和时间类org.threeten.bp
- ,解释如何使用
java.time
- ,Android版Three Ten Backport
- ,解释得非常透彻