Страница 1 из 2

Календарь выдает хаотичные значения дней, помогите!(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;

	      }

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

Добавлено: 17 авг 2013, 23:32
rezak90
во-первых в кейсах нужно ставить константы с класса Calendar, так красивее и понятней
во-вторых не учитываешь таймзоны, в итоге в разных таймзонах разные дни

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

Добавлено: 17 авг 2013, 23:49
Foenix
rezak90 писал(а):во-первых в кейсах нужно ставить константы с класса Calendar, так красивее и понятней
во-вторых не учитываешь таймзоны, в итоге в разных таймзонах разные дни
Не поняла..
а что у меня тогда одно и то же выдает и раз в день меняется?

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

Добавлено: 18 авг 2013, 00:50
rezak90
Foenix писал(а):Не поняла..
а что у меня тогда одно и то же выдает и раз в день меняется?
жаль что здесь нету смайла facepalm, так что смотри на мой аватар

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

Добавлено: 18 авг 2013, 01:22
Foenix
Блин, ну объясни ты просто... пока я гляжу на аватар

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

Добавлено: 18 авг 2013, 01:39
rezak90
Foenix писал(а):Блин, ну объясни ты просто... пока я гляжу на аватар
таймзона не о чём не говорит?

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;
} 
А разве таймзоны таким образом системно не берутся?

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

Добавлено: 18 авг 2013, 10:09
Mikhail_dev
Сейчас напишу маленький пример

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

Добавлено: 18 авг 2013, 10:21
Максим Янчий
no-- писал(а):Сейчас напишу маленький пример
Буду очень благодарен!

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

Добавлено: 18 авг 2013, 10:36
Mikhail_dev
Заранее скажу два факта, которые меня сбили немного с толку.
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]

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();?

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

Добавлено: 18 авг 2013, 11:02
Foenix
Миша, где там таймзоны???

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

Добавлено: 18 авг 2013, 11:14
Mikhail_dev
[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]
Миша, где там таймзоны???
Они тут вообще не причем.

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

Добавлено: 18 авг 2013, 11:17
Foenix
А че тогда этот человек прохожий с 2 литрами пива вещал? :)

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

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

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

Добавлено: 18 авг 2013, 11:22
Foenix
:-D

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

Добавлено: 18 авг 2013, 11:46
Foenix
Максим, имхо у тебя не нужна строчка

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

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

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

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

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]
Миша, где там таймзоны???
Они тут вообще не причем.

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

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

Добавлено: 18 авг 2013, 12:45
Максим Янчий
Foenix писал(а):Максим, имхо у тебя не нужна строчка

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

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

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

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

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

Добавлено: 18 авг 2013, 12:49
Foenix
ну тогда заноси туда текущую дату, ты ведь этого не делаешь?