Java Android:如何实现带有假日日期的ArrayList
我正在开发一个应用程序,它的一个活动中有一个计算两个日期之间工作日的机制:Java Android:如何实现带有假日日期的ArrayList,java,android,arraylist,calendar,Java,Android,Arraylist,Calendar,我正在开发一个应用程序,它的一个活动中有一个计算两个日期之间工作日的机制: package com.example.salary; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; import android.app.Activity; import android.app.DatePickerDialog; import android.content.Intent
package com.example.salary;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;
public class CountingWorkDays extends Activity {
static Calendar start_calendar = Calendar.getInstance();
static Calendar end_calendar = Calendar.getInstance();
EditText et_start;
EditText et_end;
Button count;
Button save_days;
static int workDays = 0;
static int totalDays = 0;
int dni_robocze = 0;
Calendar start_calendar_save = Calendar.getInstance();
Calendar end_calendar_save = Calendar.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.przeliczanie_dni_roboczych);
gather_start_date();
gather_end_date();
after_clicking_count();
after_clicking_save();
}
private void update_et(EditText edittext, Calendar myCalendar) { //inserting to EditText object
String myFormat = "dd/MM/yy";
SimpleDateFormat date = new SimpleDateFormat(myFormat, Locale.UK);
edittext.setText(date.format(myCalendar.getTime()));
}
public void gather_start_date() { //getting start date
et_start = (EditText) findViewById(R.id.et_od);
final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
start_calendar.set(Calendar.YEAR, year);
start_calendar.set(Calendar.MONTH, monthOfYear);
start_calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
update_et(et_start, start_calendar);
}
};
et_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new DatePickerDialog(PrzeliczanieDniRoboczych.this, date,
start_calendar.get(Calendar.YEAR), start_calendar
.get(Calendar.MONTH), start_calendar
.get(Calendar.DAY_OF_MONTH)).show();
}
});
}
public void gather_end_date() { //getting end date
et_end = (EditText) findViewById(R.id.et_do);
final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
end_calendar.set(Calendar.YEAR, year);
end_calendar.set(Calendar.MONTH, monthOfYear);
end_calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
update_et(et_end, end_calendar);
}
};
et_end.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new DatePickerDialog(PrzeliczanieDniRoboczych.this, date,
end_calendar.get(Calendar.YEAR), end_calendar
.get(Calendar.MONTH), end_calendar
.get(Calendar.DAY_OF_MONTH)).show();
}
});
}
public void after_clicking_count() { //after clicking "Calculate"
work_days = 0;
count = (Button) findViewById(R.id.b_count_workdays);
count.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
work_days = getWorkingDaysBetweenTwoDates();
}
});
}
public int getWorkingDaysBetweenTwoDates() { //getting working days between two dates
workDays = 0;
totalDays = 0;
// Return 0 if start and end are the same
if (et_start.getText().toString().trim().length() == 0
|| et_end.getText().toString().trim().length() == 0
|| et_start.getText().toString().matches("dd/mm/yy")
|| et_end.getText().toString().matches("dd/mm/yy")) {
Toast.makeText(getApplicationContext(), "Choose dates!",
Toast.LENGTH_SHORT).show();
return 0;
} else {
if (start_calendar.getTimeInMillis() > end_calendar
.getTimeInMillis()) {
Toast.makeText(PrzeliczanieDniRoboczych.this,
"Start date has to be before end date",
Toast.LENGTH_SHORT).show();
} else {
for (; start_calendar.getTimeInMillis() <= end_calendar
.getTimeInMillis(); start_calendar.add(
Calendar.DAY_OF_MONTH, 1)) {
totalDays++;
if (start_calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
&& start_calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
workDays++;
}
}
start_calendar.add(Calendar.DAY_OF_MONTH, -1 * totalDays);
Toast.makeText(PrzeliczanieDniRoboczych.this,
"Workday is this period are: " + workDays,
Toast.LENGTH_SHORT).show();
}
return workDays;
}
}
package com.example.salary;
导入java.text.simpleDataFormat;
导入java.util.Calendar;
导入java.util.Locale;
导入android.app.Activity;
导入android.app.DatePickerDialog;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.os.Bundle;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.DatePicker;
导入android.widget.EditText;
导入android.widget.Toast;
公共类CountingWorkDays扩展活动{
静态日历开始\u Calendar=Calendar.getInstance();
静态日历end_Calendar=Calendar.getInstance();
编辑文本并启动;
编辑文本等结束;
按钮计数;
按钮保存天数;
静态整数工作日=0;
静态整数总天数=0;
int dni_robocze=0;
Calendar start\u Calendar\u save=Calendar.getInstance();
日历结束\日历\保存=Calendar.getInstance();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.przeliczanie_dni_roboczych);
收集开始日期();
收集结束日期();
_单击_count()后;
单击保存()后;
}
私有无效更新_et(EditText EditText,Calendar myCalendar){//插入到EditText对象
字符串myFormat=“dd/MM/yy”;
SimpleDataFormat日期=新的SimpleDataFormat(myFormat,Locale.UK);
edittext.setText(date.format(myCalendar.getTime());
}
public void gather\u start\u date(){//获取开始日期
et_start=(EditText)findViewById(R.id.et_od);
final DatePickerDialog.OnDateSetListener日期=新建DatePickerDialog.OnDateSetListener(){
@凌驾
公共无效onDateSet(日期选择器视图,整数年,整数月,
整数(每月的第几天){
//TODO自动生成的方法存根
开始_calendar.set(calendar.YEAR,YEAR);
开始设置日历(calendar.MONTH,monthOfYear);
启动日历。设置(calendar.DAY\u OF\u MONTH,dayOfMonth);
更新时间(时间开始,开始日历);
}
};
et_start.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
新日期选择器对话框(PrzeliczanieDniRoboczych.this,date,
开始日历。获取(日历。年份),开始日历
.get(Calendar.MONTH),start\u Calendar
.get(Calendar.DAY/u/u MONTH)).show();
}
});
}
public void gather\u end\u date(){//获取结束日期
et_end=(EditText)findViewById(R.id.et_do);
final DatePickerDialog.OnDateSetListener日期=新建DatePickerDialog.OnDateSetListener(){
@凌驾
公共无效onDateSet(日期选择器视图,整数年,整数月,
整数(每月的第几天){
//TODO自动生成的方法存根
end_calendar.set(calendar.YEAR,YEAR);
end_calendar.set(calendar.MONTH,monthOfYear);
end_calendar.set(calendar.DAY_OF_MONTH,dayOfMonth);
更新日程(日程结束,日程结束);
}
};
et_end.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
新日期选择器对话框(PrzeliczanieDniRoboczych.this,date,
end_calendar.get(calendar.YEAR),end_calendar
.get(日历.月),end_日历
.get(Calendar.DAY/u/u MONTH)).show();
}
});
}
单击\u count()后的公共无效{//单击“计算”后的公共无效
工作日=0;
计数=(按钮)findViewById(R.id.b\u计数\u工作日);
count.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
工作日=两个日期之间的工作日();
}
});
}
public int GetWorkingDays between TwoDates(){//获取两个日期之间的工作日
工作日=0;
总天数=0;
//如果开始和结束相同,则返回0
if(et_start.getText().toString().trim().length()==0
||et_end.getText().toString().trim().length()=0
||et_start.getText().toString()匹配(“日/月/年”)
||et_end.getText().toString().matches(“dd/mm/yy”)){
Toast.makeText(getApplicationContext(),“选择日期!”,
吐司。长度(短)。show();
返回0;
}否则{
如果(开始日历。getTimeInMillis()>结束日历
.getTimeInMillis()){
Toast.makeText(PrzeliczanieDniRoboczych.this,
“开始日期必须早于结束日期”,
吐司。长度(短)。show();
}否则{
对于(;start_calendar.getTimeInMillis(),实际上,如果你用英语命名变量和方法,人们会更容易帮助你。好的,从逻辑上讲,如果你想计算工资,那么你所需要做的就是知道一个月有多少假期。你可以说基本公式是(totalWorkDays-totalHolidays)*baseSalary
。是否应该使用ArrayList
,这取决于您如何获得用户输入。这是我的问题,不管函数和变量的名称如何。如何收集有关假期的信息?如果这是您真正的问题,那么我建议您在您不需要时使用