Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/56: Рейтинг темы: голосов - 56, средняя оценка - 4.64
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173

Создать свой класс дата и время

11.11.2013, 18:09. Показов 10826. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
У меня проблемма с программой состоящая из 2-х частей, в которой очень много чего нужно сделать. Обращаюсь сюда так как окончательно запутался как это реализовать. Есть маленькие наброски. Может у кого-то есть подобный код? Тогда я бы сразу закрыл тему Просто хотелось бы понять как это написать. Только начал изучать java!
По сути нужно написать консольное приложение. Нелязя использовать встроенные библиотеки (date, time).
Реализовать ввод исходных данных с клавиатуры и контроль правильности ввода. Результат вывести в консоль. Реализовать обработку возможных исключений.
#1
1. Создать класс "дата". Внутренне представление даты – три целые числа, задающие день, месяц и год. Реализовать методы класса (статические) и методы реализации:
- для создания даты по заданным трем целым числам (с проверкой на недопустимые значения);
- методы сравнения дат на равенство, а также на "больше" и "меньше";
- метод нахождения количества жней, разделяющих две заданные даты.
Создать производный класс, в котором добавить метод определения дня недели и переопределить метод toString() для вывода даты в формате "дд.мм.гггг – день_недели".
Обязательно:
- в базовом классе определить конструктор по умолчанию, конструктор с параметрами и копирующий конструктор;
- в базовом классе переопределить все не финальные методы класса Object;
- несколько объектов (как базового, так и производного класса) сохранить в один массив;
- пройти по массиву и для каждого объекта:
- вывести название класса этого объекта;
- вывести результаты работы методов, определенных в базовом классе;
- если возможно, вывести результаты работы методов, определенных только в производном классе;

#2
2. Отсортировать коллекцию дат сначала по году, затем по месяцу.
Объединить созданные объекты своего класса в коллекцию ArrayList. Реализовать добавление, удаление элементов в коллекции, а также вывод коллекции на экран. Реализовать операцию по варианту двумя способами:
- с помощью методов класса Collectcions;
- без использования методов класса Collectcions.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2013, 18:09
Ответы с готовыми решениями:

Класс Дата-Время. Создать наследников класса:
Приветствую вас уважаемое сообщество. Я только начал изучать наследование. В теории знаю, что такое наследование, как оно работает, про...

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

Класс Дата-Время
Не могу понять чё от меня хочет. #include "stdafx.h" #include<iostream> #include<ctime> using namespace std; int main() ...

9
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
16.11.2013, 18:12  [ТС]
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
//Вот мои наброски по программе
//Это по обоим заданиям!!! 
//Так как пример, может кто-то поможет дополнить
class Date {
protected int day;
protected int month;
protected int year;
 
public Date (int d, int m, int y)
{day = d;}
.............
//(как пример) Алгоритм нахождения количества дней, 
//разделяющих две заданные даты:
//Есть две даты 1.02.2013 и 5.06.2013
//Вычитаем из большего меньшее и получаем - 4 м. 4 д. 
}
class DateNew extends Date {
string weekDay() {.........}
string toString() {..........}}
................
main(){
scanner s=.................;
day=s.nextInt()
m=............
y=.............
Date at=new Date(d,m,y);
Date dates[]=new Date[3];
dates[0]=dt;
.........................
//Теперь выполняется сортировка дат по возрастанию.
//Пример: есть даты 10.13 11.14 7.13
//После сортировки становятся: 10.13 7.13 14.14
// Т.е. сортировка только по месяцу и году!
Collections.sort(arraylist)
compareTo(..)
.....................
//Вот и все...
0
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
18.11.2013, 00:17
Первая часть, и то не доделанная, доделаете если не поздно

Date
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package ru.junior_progger;
/*
 *  Создать класс "дата".  
 *  Создать производный класс, в котором добавить метод определения дня недели и 
 *      переопределить метод toString() для вывода даты в формате "дд.мм.гггг – день_недели".
 *  Обязательно: 
 *      - несколько объектов (как базового, так и производного класса) сохранить в один массив;
 *      - пройти по массиву и для каждого объекта:
 *      - вывести название класса этого объекта;
 *      - вывести результаты работы методов, определенных в базовом классе;
 *      - если возможно, вывести результаты работы методов, определенных только в производном классе;
 */
public class Date {
    private int year;
    private int month;
    private int day;
    
    
    public Date(){
        
    }
    public Date(int year, int month, int day) {
        if(validDate(year, month, day)){
            this.day = day;
            this.month = month;
            this.year = year;
        }
    }
    public Date(Date anotherDate){
        this.day = anotherDate.day;
        this.month = anotherDate.month;
        this.year = anotherDate.year;
    }
    
    
    public Date getInstace(int year, int month, int day){
        if(validDate(year, month, day)){
            return new Date();
        } else
            return null;
    }
    
    
    //Некорректно работающий
    @Deprecated 
    public int getDifDays(Date anotherDate){
        // Вычисляем кол-во дней прощедщих с 0.0.0000
        long days1 = getCountOfDay(this);
        long days2 = getCountOfDay(anotherDate);
        
        
        return (int)(days1 - days2);
    }
    
    @Deprecated
    private long getCountOfDay(Date date) {
        long result = 0;
        
        
        result += date.day;
        result += date.month * 30;
        result += date.year * 365.25;
        
        return result;
    }
    public static boolean equls(Date d1, Date d2){
        return d1.equals(d2);
    }
    public static boolean after(Date d1, Date d2){
        return d1.after(d2);
    }
    public static boolean before(Date d1, Date d2){
        return d1.before(d2);
    }
    
    public boolean equals(Date anotherDate){ 
        return this.year == anotherDate.year &&
                this.month == anotherDate.month &&
                this.day == anotherDate.day;
    }
    public boolean after(Date anotherDate){
        if(this.year > anotherDate.year)
            return true;
        else if(this.year < anotherDate.year)
            return false;
        
        if(this.month > anotherDate.month)
            return  true;
        else if(this.month < anotherDate.month)
            return false;
        
        if(this.day > anotherDate.day)
            return true;
        else
            return false;
    }
    public boolean before(Date anotherDate){
        return !after(anotherDate);
    }
    
    //Некорректно работающий
    @Deprecated
    private boolean validDate(int year, int month, int day) {
        if(month > 12 && month <= 0)
            return false;
        if(day > 31 & day <= 0)
            return false;
        return true;
    }
    
    
    
    public int getYear() {
        return year;
    }
    public int getMonth() {
        return month;
    }
    public int getDay() {
        return day;
    }
    
    @Override
    public int hashCode() {
        return super.hashCode();
    }
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Date)
            return this.equals((Date)obj);
        return false;
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return new Date(this);
    }
    @Override
    public String toString() {
        return this.day + " " + this.month + " " + this.year; 
    }
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
 
}
WeekDate
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
package ru.junio_progger;
 
// Придумайте корректное название
public class WeekDate extends Date{
    private String week;
    
    
    public WeekDate() {
        super();
    }
 
 
    public WeekDate(Date anotherDate) {
        super(anotherDate);
    }
 
 
    public WeekDate(int year, int month, int day) {
        super(year, month, day);
        this.week = getWeek();
    }
 
    // Вычислить название дня-недели
    private String getWeek() {
        return "Day name";
    }
 
 
    @Override
    public String toString() {
        return super.toString() + " " + this.week;
    }
 
}


DateExample -> main()
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package ru.junior_progger;
 
public class DateExample {
    public static void main(String[] args) {
        Date[] dates = new Date[4];
        
        
        dates[0] = new Date(2013, 11, 3);
        dates[1] = new Date(2012, 1, 31);
        dates[2] = new WeekDate(0, 10, 5);
        dates[3] = new WeekDate(2000, 4, 1);
        
        for (Date date : dates) {
            System.out.println(date);
        }
    }
}
1
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
18.11.2013, 20:21  [ТС]
Благодарю за код. Как раз то, что нужно!
Но хотелось бы упомянуть несколько деталей: 1) @Deprecated можно было не писать, т.к. среда сказала, что это устарело; 2) жаль что не выводит какой именно день недели в классе WeekDate.
Поэтому решил дополнить сам и вот что получилась. Одна ошибка в строке №28 - The method difDays(WeekDate, Object) is undefined for the type WeekDate
Кажется простая вещь но не получилось исправить, где-то пропустил что-то, или не дописал. Можете растолковать?

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
package ru.junior_progger;
 
public class WeekDate extends Date{
    private String week;
    
    
    public WeekDate() {
       super();
    }
 
 
    public WeekDate(Date anotherDate) {
        super(anotherDate);
    }
 
 
    public WeekDate(int year, int month, int day) {
        super(year, month, day);
       
    }
 
    // Вычислить название дня-недели
    private String[] getWeek={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; 
  
   private String getWeekDay(){
        Object anotherDate;
        int d=difDays(this, anotherDate);   //<-ОШИБКА
        int difDays;
        String res=getWeek[(d+difDays)%7];
        return res;
    }
    
 
    @Override
    public String toString() {
        return super.toString() + " " + this.week;
    }
 
}
0
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
18.11.2013, 21:17
Цитата Сообщение от SAZl Посмотреть сообщение
1) @Deprecated можно было не писать, т.к. среда сказала, что это устарело;
Это я пометил метод как Deprecated, и написал почему этот метод устарел\некорректен!

Добавлено через 2 минуты
Цитата Сообщение от SAZl Посмотреть сообщение
Object anotherDate;
* * * * int d=difDays(this, anotherDate);
Посмотрите что принимает метод difDays(), думаю вопрос сам с собой отпадет
0
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
18.11.2013, 22:56  [ТС]
Если честно не понимаю. Разные попытки уже принял:
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
private String getWeekDay(){
            int d=difDays(this, anotherDate);
            String res=getWeek[(d+difDays)%7];
        return res;
    }
private String getWeekDay(){
        double d=difDays(this, anotherDate);
        String res=getWeek[(d+difDays)%7];
        return res;
    }
private String getWeekDay(){
        string d=difDays(this, anotherDate);
        String res=getWeek[(d+difDays)%7];
        return res;
    }
private String getWeekDay(){
        string d=difDays(this, anotherDate);
        String res=getWeek[(d+difDays)%7];
        return res;
    }
private String getWeekDay(){
res=getWeek[(difDays)%7];
        return res;
}
private String getWeekDay(){
int difDays;
        String res=getWeek[(difDays)%7];
        return res;
    }
int difDays;
        String res=getWeek[(difDays[][])%7];
        return res;
int difDays;
        String res=getWeek[(difDays()())%7];
        return res;
0
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
19.11.2013, 00:09
Цитата Сообщение от SAZl Посмотреть сообщение
Если честно не понимаю.
Если честно - я не понимаю как вычислять день недели имея только дату.
Вычислить в любом случае можно, но как?
Приведенный Ваш код - в корне неправильный.
0
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
19.11.2013, 15:54  [ТС]
Согласен неправильно. Я не понимаю где что писать. Написал наугад. Думал так создать массив дней недели getWeek, а потом из имеющихся дат day 1,2 из класса Date вычислить и присвоить им название дня вот этим getWeek[(d+difDays)%7], но это написано опять же наугад. Прошу прощения за тупость, только начал изучать Java!
0
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
19.11.2013, 18:47
Здесь на Pascale - разбирались
Pascal
В инете нашел
Для нашего современного календаря:

W = d + [ (13m - 1) / 5 ] + y + [ y / 4 ] + [ c / 4 ] - 2c

где d - число месяца;
m - номер месяца, начиная с марта (март=1, апрель=2, ..февраль=12);
y - номер года в столетии (например, для 1965 года y=65. Для января и февраля 1965 года, т.е. для m=11 или m=12 номер года надо брать предыдущий, т.е. y=64);
c - количество столетий (например, для 2000 года c=20. И здесь для января и февраля 2000 года надо брать предыдущее столетие с=19);
квадратные скобки означают целую часть полученного числа (отбрасываем дробную).

Результат W делите на 7 и модуль остатка от деления даст день недели (воскресенье=0, понедельник=1, ..суббота=6)

Пример: для 31 декабря 2008 года определяем:
d=31, m=10, y=8, c=20

По формуле находим:
W = 31 + [ ( 13 * 10 - 1 ) / 5 ] + 8 + [ 8 / 4 ] + [ 20 / 4 ] - 2 * 20 =
= 31 + 25 + 8 + 2 + 5 - 40 = 31

Теперь делим W на 7 и находим остаток от деления: 31 / 7 = 4 и 3 в остатке.
Тройка соответствует дню недели СРЕДА.
0
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
19.11.2013, 21:26  [ТС]
Эх... Не помогло. Не смог тот код подконектится с этим.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public WeekDate(int year, int month, int day) {
        super(year, month, day);
        String a[]=new String[6];
        a[0]="Monday";
        a[1]="Tuesday";
        a[2]="Wednesday";
        a[3]="Thursday";
        a[4]="Friday";
        a[5]="Saturday";
        a[6]="Sunday";
        if(month<3){
            month=month+10;
            year=year-1;
        }
        else {
            month=month-2;
        }
        int c=year/100;
        q=Math.floor(2.6*month-0.2);
        year=year%100;
        int w=(int) Math.abs(q+day+year/4+year+c/4-2*c);
        this.week = a[w];
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2013, 21:26
Помогаю со студенческими работами здесь

Класс Триада, Дата и Время
Всем привет. Я в программировании новичок :) пожалуйста, помогите написать программу. Создать класс Triad (тройка) с виртуальными...

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать абстрактный базовый класс Тройка чисел с...

Из класса "Дата" с полями день, месяц, год создать класс "Время" с дополнительными полями час, минута, секунда
в общем .надо класс дата полями день, месяц год.теперь мне надо создать класс &quot;Время&quot; з дополнительными полями...

Как разделить колонку с форматом Дата/время на две - Дата и время
Здравствуйте. Подскажите пожалуйста, как разделить колонку с форматом Дата/время на две - Дата и время Задача выглядит следующим...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru