2016-04-27 5 views
1

Я хочу создать функцию, которая получает enumDayOfWeek, а затем использовать значение этого дня для чего-то еще.Как установить значения java DayOfWeek?

Моя проблема в том, что я не могу установить (фактически переопределить) возвращаемые значения.

Например:

DayOfWeek.SUNDAY.getValue(); // return 7 

Я хочу установить SUNDAY в 0, MONDAY к 1 и так далее ... Есть ли способ сделать это?

+0

Требуется локализованный недельный день. Расскажите больше о том, что вы действительно хотите сделать. Что вы подразумеваете под * хотите установить SUNDAY на «0», MONDAY - «1» *? Вы используете Java Time? Joda? – Tunaki

+0

Как насчет 'DayOfWeek.SUNDAY.getValue()% 7'? –

+0

@Tunaki - Как вы сказали, я хочу провести локализованную неделю, указав «новые» значения для недельных дней. Для меня важно, чтобы значение SUNDAY было «0», а не «7». это послужит мне позже для некоторой инфраструктуры, которую я пишу. Я хочу, чтобы моя функция получала перечисление DayOfWeek, а не определяла значения новых дней. – nimrod

ответ

1

Просто определить собственную нумерацию с членом типа Int, конструктор, который присваивает ИНТ и аксессору:

public enum MyDayOfWeek { 

    SUNDAY(0), MONDAY(1)....; 
    private int id; 
    MyDayOfWeek(int id) { 
    this.id = id; 
    } 

    public int getId() { return id;} 
} 
0
public enum DayOfWeek{ 
    SUNDAY(0), 
    MONDAY(1), 
    TUESDAY(2); 
} 

DayofWeek day = Status.SUNDAY; System.out.println(day.name()); 

попытаться организовать ваше перечисление в порядке. это может помочь вам

0

Вы можете написать что-то вроде этого:

public static int getDayOrderNumber(DayOfWeek dow) 
{ 
    EnumMap<DayOfWeek, Integer> days = new EnumMap(DayOfWeek.class){{ 
     put(DayOfWeek.SUNDAY, 0); 
     put(DayOfWeek.MONDAY, 1); 
     ... 
    }}; 
    return days.get(dow); 
} 

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

0

java.time.DayOfWeek

Java 8, а позднее такое перечисление встроенной, java.time.DayOfWeek.

По стандарту ISO 8601 неделя определяется как понедельник-воскресенье, с номером 1-7.

int dayNumber = DayOfWeek.MONDAY.getValue() ; // 1 = Monday, 7 = Sunday. 

Преобразовать от ISO 8601 стиля, чтобы США

Если вы хотите в неделю, как правило, используется в Соединенных Штатах, с воскресенья будучи первым, использовать математику. Расчет по модулю 7, то плюс 1.

(DayOfWeek.SUNDAY.getValue() % 7) + 1 

Как это:

System.out.println((DayOfWeek.SUNDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.MONDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.TUESDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.WEDNESDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.THURSDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.FRIDAY.getValue() % 7) + 1) ; 
System.out.println((DayOfWeek.SATURDAY.getValue() % 7) + 1) ; 

Вы вопрос противоречив и неясен, так что я не уверен в своей цели, если воскресенье, суббота быть 0-6, а затем использовать выше математику, но сделать не добавляйте один.

(DayOfWeek.SUNDAY.getValue() % 7) // Sunday = 0, Monday = 1 , … , Saturday = 6. 

java.util.Calendar константы

В то время как я никогда бы не рекомендовал использовать наследие Date/Calendar классов, но и для вашей информации, java.util.Calendar класс определяет ряд int констант (не перечисление) в течение дней в течение недели, где Calendar.SUNDAY - 1 и т. д. до Calendar.SATURDAY - 7.


О java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.

Где получить классы java.time?

  • Java SE 8, Java SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
  • Android

ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.

Смежные вопросы