gregorian calender

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • gregorian calender

    Ich habe eine Counter APP geschrieben und benutze dafür den gregorianischen Kalender zum Umrechnen (siehe nachfolgende Zeilen).

    private final long finalDay = new GregorianCalendar(2020, 7, 27).getTimeInMillis();
    private final long DAYS = 1000 * 60 * 60 * 24;Jetzt tritt folgendes Problem auf.Das Zieldatum wird Hardcoded eingegeben (siehe oben 2020,07,27),wenn Datum gleich ist erscheint 0, wenn Datum +1 ist erscheint auch 1,erst wenn Datum +2 ist erscheint 1,Warum ist das so.für Hinweise bin sehr dankbar.kermit
  • Hallo

    Etwas mehr Mühe bei deinem Post könntest du dir schon geben vorallen Übersicht.
    Quellcode und Text etwas trennen.
    Es gibt auch einen Code Block in den Forum was man benutzen darf und sollte.

    Richtig erklären was du willst oder tust, tust du auch nicht, so wirst du keine vernünftige Hilfe bekommen.

    Vor allem was vergleichst du und wie? Ohne Code ist die Frage sinnlos.

    Auf diesen verquirlten Post kann und werde ich keine Hilfe geben.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Hallo,

    Es tut mir leid wenn ich mich nicht richtig ausgedrückt habe aber das ist meine erste Anfrage und ich bin neu hier in eurem Forum.

    Mit dem Ausdruck Code Block kann ich nichts anstellen. Was ist das?

    Ich werde auf alle fälle die Anfrage noch einmal neu schreiben.

    kermit
  • Wichtig ist wie du den Datums Vergleich machst wie du auf die 0, 1, oder 2 kommst?
    Ohne Code kann man da nichts sagen.

    Im Forum gibt es oben ein Symbol icon </>
    Dort solltest du Code eingeben. Zumindestens Wenn er mehrere Zeilen sind.

    Und wenn du Code so postest bitte nicht gleich weiter Scheiben. Keiner will das erst auseinander fummeln. Neue Zeile vileicht.

    So jetzt poste die entsprechende Zeile.
    Ein Feedback auf Tipps ist auch schön. :P
  • Hier sind die Codes von meiner Counter APP.
    Ich werde versuchen das Problem nochmal genau zu beschreiben.

    in dieser Zeile schreibe ich derzeit noch das Datum ein wann das Ereignis ist.
    private final long finalDay = new GregorianCalendar(2020, 7, 29).getTimeInMillis();

    mit dem Gregorianischem Kalender soll dann die Anzahl der tage berechnet wann das Ereignis ist und im Text Feld

    (android:id="@+id/editTextNumberSigned")

    ausgegeben werden.

    In diesem Beispiel ist es jetzt so:
    Heute beim Tagesdatum 28.08.2020 wird 0 ausgegeben.
    Nach meinem verständnis sollte aber eine 1 ausgegeben werden.

    Kann mir jemand sagen warum das so ist.


    activity_main.xml


    MainActivity.java

    Java-Quellcode

    1. package com.example.mz_counter;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.content.SharedPreferences;
    4. import android.os.Bundle;
    5. import android.widget.EditText;
    6. import android.widget.TextView;
    7. import java.util.GregorianCalendar;
    8. public class MainActivity extends AppCompatActivity {
    9. private EditText editText1;
    10. private EditText editText2;//Tag
    11. private EditText editText3;//Monat
    12. private EditText editText4;//Jahr
    13. //int iy = Integer.parseInt(String.valueOf(findViewById(R.id.year)));
    14. //int im = Integer.parseInt(String.valueOf(findViewById(R.id.month)));
    15. //int id = Integer.parseInt(String.valueOf(findViewById(R.id.day)));
    16. private final long finalDay = new GregorianCalendar(2020, 7, 27).getTimeInMillis();
    17. private final long DAYS = 1000 * 60 * 60 * 24;
    18. private void updateDayGui (){
    19. TextView remainingDaysTextView = (TextView) findViewById(R.id.editTextNumberSigned);
    20. long remainingDays = (finalDay - System.currentTimeMillis()) / DAYS;
    21. remainingDaysTextView.setText(remainingDays + "");
    22. }
    23. @Override
    24. protected void onCreate(Bundle savedInstanceState) {
    25. super.onCreate(savedInstanceState);
    26. setContentView(R.layout.activity_main);
    27. updateDayGui();
    28. editText1 = (EditText) findViewById(R.id.input);
    29. editText2 = (EditText) findViewById(R.id.day);
    30. editText3 = (EditText) findViewById(R.id.month);
    31. editText4 = (EditText) findViewById(R.id.year);
    32. //Shared Prefs Datei öffnen
    33. SharedPreferences mySPR = getSharedPreferences("MySPFILE",0);
    34. //Schlüsselwerte aus der Datei in Textfelder
    35. editText1.setText(mySPR.getString("myKey1","Neu"));
    36. editText2.setText(mySPR.getString("myKey2","Neu"));
    37. editText3.setText(mySPR.getString("myKey3","Neu"));
    38. editText4.setText(mySPR.getString("myKey4","Neu"));
    39. }
    40. @Override
    41. protected void onStop() {
    42. super.onStop();
    43. SharedPreferences mySPR = getSharedPreferences("MySPFILE" , 0);
    44. SharedPreferences.Editor editor = mySPR.edit();
    45. editor.putString("myKey1",editText1.getText().toString());
    46. editor.putString("myKey2",editText2.getText().toString());
    47. editor.putString("myKey3",editText3.getText().toString());
    48. editor.putString("myKey4",editText4.getText().toString());
    49. editor.commit();
    50. }
    Alles anzeigen
  • Dann überlege mal was long ist, ist eine Ganzzahl wie Int nur mit 64 Bit.

    Was kommt bei der Division raus ?


    long remainingDays = (finalDay - System.currentTimeMillis()) / DAYS;


    du arbeitest ja nur mit den Long werten ,nicht mit dem Kalender .



    nimm dir ein Beispiel und rechne es selber. Und mache am ende ein Type cast zu int oder long.

    Welche Zeit wird deiner Meinung nach genommen wenn du das Datum von heute ein gibst. Und welchen long Wert bekommst du heute um 12 Uhr.
    Wie ist das Ergebnis von deinem Datum minus der actuellen Uhrzeit z.b 12 Uhr.
    Größer oder kleiner oder gleich 0?
    Auf jeden Fall kleiner Null.
    Wenn du keine Zeit bei deinem Datum angibst wird 00:00:00 genommen. UTC 0

    Was hast du nach der Division mit einen Tag? Weniger als einen Tag dezimal sogar minus.

    Das ist einfache Mathematik.


    Was macht ein Typ cast von -0,1 zu Int?
    Ein runden findet im allgemeinen nicht statt. Wenn du es nicht machst. Einfach nur Ganzzahl und Rest. Und die Ganzzahl ist in der long.
    Selbst - 0,99999999 wird zu 0


    Heute beim Tagesdatum 28.08.2020 wird 0 ausgegeben.
    Ist doch auch richtig von heute 0:00 zu heute 10:00 sind auch weniger als ein Tag.
    Ganzzahlen Kommastellen gibst es nicht bei long.
    Keine Ahnung was du hier rechnest.

    Bedenken musst du auch noch in welche Zeitzone du das Datum bei der Eingabe bekommst ohne Angabe ist es UTC 0.

    Die Systemzeit wenn du in Deutschland bist bekommst du in utc +1 momentan Sommer Zeit utc +2 als long wert zurück.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von jogimuc ()

  • Vielen Dank für die Anregung und die Tipps.

    Zu meinem ersten Beitrag muss ich leider hinzufügen, das ich den so nicht geschrieben habe.
    Wer oder vielmehr welches Programm mir das auf diese weise umformatiert hat weiß ich nicht.
    Gebe dir völlig recht das man so nicht damit Arbeiten kann.