Календарь выдает хаотичные значения дней, помогите!(Calenda)

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Календарь выдает хаотичные значения дней, помогите!(Calenda)

Сообщение Максим Янчий » 17 авг 2013, 23:18

Помогите, пожалуйста! Связываю приложение с календарем, но он же и стал проблемой( Нужно узнать день недели и в зависимости от этого сделать определенное действие через выбор switch(). Выдает абсолютно хаотичные значения дней, то Пятница, то Четверг, то Воскресенье. Привожу пример кода, помогите и поясните что не так! Заранее благодарен!)

Код: Выделить всё

 Calendar calendar  = Calendar.getInstance();
	      
	      calendar.clear();
	      int dow = calendar.get(Calendar.DAY_OF_WEEK);
	      switch(dow){
	      case 7:
	...
break;
      case 6:
	...
break;
      case 5:
	...
break;
      case 4:
	...
break;
      case 3:
	...
break;
      case 2:
	...
break;      case 1:
	...
break;

	      }

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение rezak90 » 17 авг 2013, 23:32

во-первых в кейсах нужно ставить константы с класса Calendar, так красивее и понятней
во-вторых не учитываешь таймзоны, в итоге в разных таймзонах разные дни
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Foenix » 17 авг 2013, 23:49

rezak90 писал(а):во-первых в кейсах нужно ставить константы с класса Calendar, так красивее и понятней
во-вторых не учитываешь таймзоны, в итоге в разных таймзонах разные дни
Не поняла..
а что у меня тогда одно и то же выдает и раз в день меняется?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение rezak90 » 18 авг 2013, 00:50

Foenix писал(а):Не поняла..
а что у меня тогда одно и то же выдает и раз в день меняется?
жаль что здесь нету смайла facepalm, так что смотри на мой аватар
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Foenix » 18 авг 2013, 01:22

Блин, ну объясни ты просто... пока я гляжу на аватар
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение rezak90 » 18 авг 2013, 01:39

Foenix писал(а):Блин, ну объясни ты просто... пока я гляжу на аватар
таймзона не о чём не говорит?
R.id.team
Политика на форуме запрещена

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Максим Янчий » 18 авг 2013, 09:39

rezak90 писал(а):во-первых в кейсах нужно ставить константы с класса Calendar, так красивее и понятней
во-вторых не учитываешь таймзоны, в итоге в разных таймзонах разные дни
Вы имеете в виду это?

Код: Выделить всё

Calendar calendar  = Calendar.getInstance(); 
           
          calendar.clear(); 
          int dow = calendar.get(Calendar.DAY_OF_WEEK); 
          switch(dow){ 
          case Calendar.MONDAY: 
    ... 
break; 
      case Calendar.MONDAY: 
    ... 
break;
} 
А разве таймзоны таким образом системно не берутся?


Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Максим Янчий » 18 авг 2013, 10:21

no-- писал(а):Сейчас напишу маленький пример
Буду очень благодарен!

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Mikhail_dev » 18 авг 2013, 10:36

Заранее скажу два факта, которые меня сбили немного с толку.
1. Нумерация дня недели начинается с воскресенья, т.е. Sunday = 1, Monday = 2
2. Нумерация месяца идёт с нуля, т.е. август = 7 месяцу.
Код активити
[syntax=java5]
public class MainActivity extends Activity implements View.OnClickListener {
private EditText et;
private Calendar calendar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btnDayOfWeek);
btn.setOnClickListener(this);
et = (EditText) findViewById(R.id.editText);
}


@Override
public void onClick(View v) {
calendar = Calendar.getInstance();
calendar.set(2013,7,Integer.parseInt(et.getText().toString()));
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
switch(dayOfWeek){
case Calendar.MONDAY:
Toast.makeText(this,"MONDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.TUESDAY:
Toast.makeText(this,"TUESDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.WEDNESDAY:
Toast.makeText(this,"WEDNESDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.THURSDAY:
Toast.makeText(this,"THURSDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.FRIDAY:
Toast.makeText(this,"FRIDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.SATURDAY:
Toast.makeText(this,"SATURDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.SUNDAY:
Toast.makeText(this,"SUNDAY", Toast.LENGTH_SHORT).show();
break;

}
// int month = calendar.get(Calendar.MONTH);
// int year = calendar.get(Calendar.YEAR);
// Toast.makeText(this,"month = "+month, Toast.LENGTH_SHORT).show();
// Toast.makeText(this,"year = "+year, Toast.LENGTH_SHORT).show();
}
}
[/syntax]
Ресурсы
[syntax=xml]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="выберите день месяца"
android:id="@+id/textView"/>

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/textView"
android:layout_alignParentRight="true"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Узнать день недели"
android:id="@+id/btnDayOfWeek"
android:layout_below="@+id/editText"
android:layout_alignParentLeft="true"/>

</RelativeLayout>
[/syntax]

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Максим Янчий » 18 авг 2013, 10:46

no-- писал(а):Заранее скажу два факта, которые меня сбили немного с толку.
1. Нумерация дня недели начинается с воскресенья, т.е. Sunday = 1, Monday = 2
2. Нумерация месяца идёт с нуля, т.е. август = 7 месяцу.
Код активити
[syntax=java5]
public class MainActivity extends Activity implements View.OnClickListener {
private EditText et;
private Calendar calendar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btnDayOfWeek);
btn.setOnClickListener(this);
et = (EditText) findViewById(R.id.editText);
}


@Override
public void onClick(View v) {
calendar = Calendar.getInstance();
calendar.set(2013,7,Integer.parseInt(et.getText().toString()));
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
switch(dayOfWeek){
case Calendar.MONDAY:
Toast.makeText(this,"MONDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.TUESDAY:
Toast.makeText(this,"TUESDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.WEDNESDAY:
Toast.makeText(this,"WEDNESDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.THURSDAY:
Toast.makeText(this,"THURSDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.FRIDAY:
Toast.makeText(this,"FRIDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.SATURDAY:
Toast.makeText(this,"SATURDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.SUNDAY:
Toast.makeText(this,"SUNDAY", Toast.LENGTH_SHORT).show();
break;

}
// int month = calendar.get(Calendar.MONTH);
// int year = calendar.get(Calendar.YEAR);
// Toast.makeText(this,"month = "+month, Toast.LENGTH_SHORT).show();
// Toast.makeText(this,"year = "+year, Toast.LENGTH_SHORT).show();
}
}


Спасибо большое! а как узнать дату, чтобы самому не вписывать Integer.parseInt(et.getText().toString())?
Может можно как-то через конструкцию Date d = new Date();?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Foenix » 18 авг 2013, 11:02

Миша, где там таймзоны???
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Mikhail_dev » 18 авг 2013, 11:14

[syntax=java5]
public class MainActivity extends Activity implements View.OnClickListener {
private EditText et;
private Calendar c;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btnDayOfWeek);
btn.setOnClickListener(this);
Button btnCurrentDate = (Button) findViewById(R.id.btnCurrentDate);
btnCurrentDate.setOnClickListener(this);
et = (EditText) findViewById(R.id.editText);
c = Calendar.getInstance();
}


@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnDayOfWeek:
c.set(2013, 7, Integer.parseInt(et.getText().toString()));
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
switch(dayOfWeek){
case Calendar.MONDAY:
Toast.makeText(this,"MONDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.TUESDAY:
Toast.makeText(this,"TUESDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.WEDNESDAY:
Toast.makeText(this,"WEDNESDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.THURSDAY:
Toast.makeText(this,"THURSDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.FRIDAY:
Toast.makeText(this,"FRIDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.SATURDAY:
Toast.makeText(this,"SATURDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.SUNDAY:
Toast.makeText(this,"SUNDAY", Toast.LENGTH_SHORT).show();
break;

}
break;
case R.id.btnCurrentDate:
c.setTimeInMillis(System.currentTimeMillis());
String sDate = c.get(Calendar.DAY_OF_MONTH)+"."+(c.get(Calendar.MONTH)+1)+"."+c.get(Calendar.YEAR);
Toast.makeText(this, "Today " + sDate,Toast.LENGTH_SHORT).show();
break;
}
}
}
[/syntax]
[syntax=xml]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="выберите день месяца"
android:id="@+id/textView"/>

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/textView"
android:layout_alignParentRight="true"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Узнать день недели"
android:id="@+id/btnDayOfWeek"
android:layout_below="@+id/editText"
android:layout_alignParentLeft="true"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Текущая дата"
android:id="@+id/btnCurrentDate"
android:layout_below="@+id/editText"
android:layout_toRightOf="@+id/btnDayOfWeek"/>

</RelativeLayout>
[/syntax]
Миша, где там таймзоны???
Они тут вообще не причем.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Foenix » 18 авг 2013, 11:17

А че тогда этот человек прохожий с 2 литрами пива вещал? :)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Mikhail_dev » 18 авг 2013, 11:18

Ну как что, он просто был на тот момент не в часовом поясе земли, либо магнитные бури на него напали =)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Foenix » 18 авг 2013, 11:22

:-D
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Foenix » 18 авг 2013, 11:46

Максим, имхо у тебя не нужна строчка

Код: Выделить всё

 calendar.clear(); 
т.к. в этой строке

Код: Выделить всё

Calendar calendar  = Calendar.getInstance();
Календарь получает текущую дату, а ты ее потом зачм-то очищаешь. А остальное в коде, за исключением может быть путаницы с числами дней недели, должно работать правильно и не выдавать каждый раз новое значение дня недели. У меня, например, тоже так же, но день недели меняется раз в день.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Максим Янчий » 18 авг 2013, 12:41

no-- писал(а):[syntax=java5]
public class MainActivity extends Activity implements View.OnClickListener {
private EditText et;
private Calendar c;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btnDayOfWeek);
btn.setOnClickListener(this);
Button btnCurrentDate = (Button) findViewById(R.id.btnCurrentDate);
btnCurrentDate.setOnClickListener(this);
et = (EditText) findViewById(R.id.editText);
c = Calendar.getInstance();
}


@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnDayOfWeek:
c.set(2013, 7, Integer.parseInt(et.getText().toString()));
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
switch(dayOfWeek){
case Calendar.MONDAY:
Toast.makeText(this,"MONDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.TUESDAY:
Toast.makeText(this,"TUESDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.WEDNESDAY:
Toast.makeText(this,"WEDNESDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.THURSDAY:
Toast.makeText(this,"THURSDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.FRIDAY:
Toast.makeText(this,"FRIDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.SATURDAY:
Toast.makeText(this,"SATURDAY", Toast.LENGTH_SHORT).show();
break;
case Calendar.SUNDAY:
Toast.makeText(this,"SUNDAY", Toast.LENGTH_SHORT).show();
break;

}
break;
case R.id.btnCurrentDate:
c.setTimeInMillis(System.currentTimeMillis());
String sDate = c.get(Calendar.DAY_OF_MONTH)+"."+(c.get(Calendar.MONTH)+1)+"."+c.get(Calendar.YEAR);
Toast.makeText(this, "Today " + sDate,Toast.LENGTH_SHORT).show();
break;
}
}
}
[/syntax]
[syntax=xml]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="выберите день месяца"
android:id="@+id/textView"/>

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/textView"
android:layout_alignParentRight="true"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Узнать день недели"
android:id="@+id/btnDayOfWeek"
android:layout_below="@+id/editText"
android:layout_alignParentLeft="true"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Текущая дата"
android:id="@+id/btnCurrentDate"
android:layout_below="@+id/editText"
android:layout_toRightOf="@+id/btnDayOfWeek"/>

</RelativeLayout>
[/syntax]
Миша, где там таймзоны???
Они тут вообще не причем.

СПАСИБО БОЛЬШОЕ!

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Максим Янчий » 18 авг 2013, 12:45

Foenix писал(а):Максим, имхо у тебя не нужна строчка

Код: Выделить всё

 calendar.clear(); 
т.к. в этой строке

Код: Выделить всё

Calendar calendar  = Calendar.getInstance();
Календарь получает текущую дату, а ты ее потом зачм-то очищаешь. А остальное в коде, за исключением может быть путаницы с числами дней недели, должно работать правильно и не выдавать каждый раз новое значение дня недели. У меня, например, тоже так же, но день недели меняется раз в день.
Я читал в доках явы, что предыдущее значение все же сохраняется и если это не надобно, то лучше применить эту операцию.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Календарь выдает хаотичные значения дней, помогите!(Cale

Сообщение Foenix » 18 авг 2013, 12:49

ну тогда заноси туда текущую дату, ты ведь этого не делаешь?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить