Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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 Android:如何实现带有假日日期的ArrayList_Java_Android_Arraylist_Calendar - Fatal编程技术网

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
,这取决于您如何获得用户输入。这是我的问题,不管函数和变量的名称如何。如何收集有关假期的信息?如果这是您真正的问题,那么我建议您在您不需要时使用