Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
anton_rynkovoy
0 / 0 / 1
Регистрация: 25.01.2016
Сообщений: 14
#1

Как ввести свою дату в Android? - Программирование Android

04.09.2016, 22:26. Просмотров 724. Ответов 12
Метки нет (Все метки)

Добрый вечер.
Задача такая: нужно ввести дату (например дня рождения) и посчитать сколько прошло дней, то бишь сколько дней живешь.
План такой: текущую дату перевожу в миллисекунды, дату рождения перевожу в миллисекунды, вычитаю и перевожу в дни.

Вопрос: как ввести свою дату?) Никак не могу понять)

Пробовал таким образом вставлять дату и переводить в миллисекунды, но результат выдает неправильный.

Java
1
2
3
4
String date = "23.01.2015";
                    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
                    Date myDate = dateFormat.parse(date);
                    long d = myDate.getTime();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2016, 22:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как ввести свою дату в Android? (Программирование Android):

Android Studio Как подключить свою базу данных
База данных *.sqlite Нужна помощь гуру, как образом это реализуется, не...

Android studio не выводит дату в TextView
Здравствуйте. Программируя в Android studio, столкнулся с проблемой: я никак не...

Android studio, как запускать программу сразу на android смартфоне подключенному к usb?
android studio, как запускать программу сразу на android смартфоне...

Android NDK. Как пользоваться? Когда стоит использовать его вместо Android SDK?
Можно ли писать в нем готовые приложения Android?

Как приложение Android написать на С++ в Android NDK, чтоб получить *.apk? Нужен мануал
Уже не в первый раз задаю вопрос. Молчание. В лучшем случае - "RTFM" и точка....

Как добавить Android-проект в Eclipse с Android SDK, чтобы после его можно было запустить на виртуальной машине?
Вот у меня с интернета скачан готовый андрой-проект, но я не знаю как его...

12
ExFau$t
520 / 475 / 101
Регистрация: 08.05.2012
Сообщений: 2,383
04.09.2016, 22:48 #2
Используй TimeStamp.
0
anton_rynkovoy
0 / 0 / 1
Регистрация: 25.01.2016
Сообщений: 14
04.09.2016, 22:52  [ТС] #3
А не подскажешь, как сделать, чтобы ввод даты в textEdit разделялся точками?
0
ExFau$t
520 / 475 / 101
Регистрация: 08.05.2012
Сообщений: 2,383
04.09.2016, 22:59 #4
И ещё, время в адроиде в милисекундах, а там где ты проверяешь, возможно, в секундах.

Добавлено через 33 секунды
в разметке для этого элемента посмотри inputType или как-то так
0
anton_rynkovoy
0 / 0 / 1
Регистрация: 25.01.2016
Сообщений: 14
04.09.2016, 23:02  [ТС] #5
Все, спасибо, уже получилось)) не знаю как, но таким способом, как я делал , вышло) может не замечал недочет какой-то.

Я поставил inputType = "date". но он не ставит точки. он разрешает вводить только цифры.
0
kozak95
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
04.09.2016, 23:09 #6
anton_rynkovoy,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
    public static int calculateAge(String date) throws ParseException{ //dd.MM.yyyy
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
        Date myDate = dateFormat.parse(date);
        Calendar dob = Calendar.getInstance();
        Calendar today = Calendar.getInstance();
        dob.setTime(myDate);
        dob.add(Calendar.DAY_OF_MONTH, -1);
        int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
        if (today.get(Calendar.DAY_OF_YEAR) <= dob.get(Calendar.DAY_OF_YEAR)) {
            age--;
        }
        return age;
    }
0
ExFau$t
520 / 475 / 101
Регистрация: 08.05.2012
Сообщений: 2,383
04.09.2016, 23:16 #7
Тогда нужно что-то другое использовать, например это:

Кликните здесь для просмотра всего текста
https://developer.android.com/reference/android/text/TextWatcher.html?hl=ru


Там реализуешь логику, что пользователь может вводить только с 0 по 2 символ, с 3 по 5, с 6 по 10, остальное выставишь точки. Ну или кто по-проще посоветует, я не знаю.
0
kozak95
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
04.09.2016, 23:17 #8
anton_rynkovoy, Ну если по хорошему, то Вам следует использовать TextWatcher для такой задачи.
0
Lumber
295 / 100 / 41
Регистрация: 02.12.2015
Сообщений: 241
04.09.2016, 23:24 #9
anton_rynkovoy,
1. Когда создаёшь экземпляр Date туда уже текущая дата/время помещается.
2. Для ввода даты есть специальная штука: DatePicker
0
fraley
110 / 110 / 43
Регистрация: 24.05.2015
Сообщений: 329
05.09.2016, 06:43 #10
Примерно с год назад делал что-то подобное:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
public class MainActivity extends AppCompatActivity {
    DatePicker datePicker;
    boolean boolFirst=true;
    Calendar firstCalendar;
    Calendar secondCalendar;
    TextView first;
    TextView second;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Calendar cal = Calendar.getInstance(TimeZone.getDefault());
        ImageButton imageButtonFirstDate=(ImageButton)findViewById(R.id.imageButtonFirstDate);
        imageButtonFirstDate.setImageResource(R.drawable.datepicker2);
        ImageButton imageButtonSecondDate=(ImageButton)findViewById(R.id.imageButtonSecondDate);
        imageButtonSecondDate.setImageResource(R.drawable.datepicker);
        first = (TextView) findViewById(R.id.textViewFirstDate);
        second = (TextView) findViewById(R.id.textViewSecondDate);
 
 
        DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
 
            // when dialog box is closed, below method will be called.
            public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
                String year1 = String.valueOf(selectedYear);
                String month1 = String.valueOf(selectedMonth + 1);
                String day1 = String.valueOf(selectedDay);
 
 
                if(boolFirst) {
                    first.setText(day1 + "/" + month1 + "/" + year1);
                    firstCalendar=new GregorianCalendar(selectedYear, selectedMonth,selectedDay);
                    Log.i("MY_TAG", "Value: "+day1);
                }
                else {
                    second.setText(day1 + "/" + month1 + "/" + year1);
                    secondCalendar=new GregorianCalendar(selectedYear, selectedMonth,selectedDay);
                    Log.i("MY_TAG", "Value: "+day1);
                }
 
            }
        };
 
        final DatePickerDialog datePicker = new DatePickerDialog(this,
                R.style.AppTheme,
                datePickerListener,
                cal.get(Calendar.YEAR),
                cal.get(Calendar.MONTH),
                cal.get(Calendar.DAY_OF_MONTH));
        datePicker.setCancelable(false);
        datePicker.setTitle("Select the date");
 
 
 
 
        imageButtonFirstDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                datePicker.show();
                boolFirst=true;
 
            }
        });
 
        imageButtonSecondDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                datePicker.show();
                boolFirst=false;
 
            }
        });
 
        ((Button)findViewById(R.id.buttonCalculate)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                if(first.getText().toString().trim().length()==0 || second.getText().toString().trim().length()==0) {
 
                    if(first.getText().toString().trim().length()==0 && second.getText().toString().trim().length()==0) {
                        Toast.makeText(getApplicationContext(), "Please set value for first and second dates!", Toast.LENGTH_SHORT).show();
                    }
                    else if(first.getText().toString().trim().length()==0){
                        Toast.makeText(getApplicationContext(), "Please set value for first date!", Toast.LENGTH_SHORT).show();
                    }
                    else{
                        Toast.makeText(getApplicationContext(), "Please set value for second date!", Toast.LENGTH_SHORT).show();
                    }
                }
                else {
                    long temp = secondCalendar.getTimeInMillis() - firstCalendar.getTimeInMillis();
                    long result = temp / 86400000;
                    ((TextView) findViewById(R.id.textViewResult)).setText("The result: " + result);
                }
            }
        });
 
    }
}
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
05.09.2016, 12:55 #11
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.DatePicker;
import android.widget.TextView;
import java.util.Calendar;
import java.util.concurrent.TimeUnit;
import static java.util.Calendar.*;
 
public class MainActivity extends AppCompatActivity implements DatePicker.OnDateChangedListener {
 
    private TextView daysTextView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker);
        final Calendar c = getInstance();
        if (datePicker != null) datePicker.init(c.get(YEAR), c.get(MONTH), c.get(DAY_OF_MONTH), this);
        //
        daysTextView = (TextView) findViewById(R.id.daysTextView);
    }
 
    @Override
    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        final Calendar c = getInstance();
        c.set(year, monthOfYear, dayOfMonth);
        long ms = System.currentTimeMillis() - c.getTimeInMillis();
        long days = TimeUnit.MILLISECONDS.toDays(ms);
        daysTextView.setText(String.valueOf(days));
    }
}
PROFIT
0
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
07.09.2016, 21:32 #12
Java
1
2
3
4
Calendar testCalendar = getInstance();
testCalendar.set(year, monthOfYear, dayOfMonth);
long millisDiff = Calendar.getInstance().getTimeInMillis() - testCalendar.getTimeInMillis();
long daysDiff = TimeUnit.MILLISECONDS.toDays(millisDiff);
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
10.09.2016, 17:42 #13
Цитата Сообщение от Паблито Посмотреть сообщение
final Calendar c = getInstance(); c.set(year, monthOfYear, dayOfMonth); long ms = System.currentTimeMillis() - c.getTimeInMillis(); long days = TimeUnit.MILLISECONDS.toDays(ms);
Цитата Сообщение от xaat Посмотреть сообщение
Calendar testCalendar = getInstance(); testCalendar.set(year, monthOfYear, dayOfMonth); long millisDiff = Calendar.getInstance().getTimeInMillis() - testCalendar.getTimeInMillis(); long daysDiff = TimeUnit.MILLISECONDS.toDays(millisDiff);
найди 10 отличий
0
10.09.2016, 17:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2016, 17:42
Привет! Вот еще темы с решениями:

Как загрузить свою иконку?
Как заменить базовую иконку мобильного приложения на свою? Не реагирует на...

Как использовать свою разметку для ListFragment?
Всех с праздниками. Подскажите как использовать (какую лучше) свою разметку для...

Как добавить в программу свою иконку запуска приложения
Подскажите пожалуйста как добавить в программу свою иконку запуска приложения?...

Как добавить в начало приложения (готового .apk файла) свою сцену?
Подскажите пожалуйста, как добавить в начало приложения (готового .apk файла)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru