Ich möchte Kalenderansicht machen, um Touch-Interaktion zu unterstützen. Also ich möchte neue benutzerdefinierte Kalenderansicht erstellen. Ich habe versucht, Mapping-Funktion zwischen View Offset und Real Date-Wert zu machen.Android java.util.Calendar - Zeitunterschied
Hier ist meine Idee: Wenn ich die Anzahl der Wochen seit Basisdatum berechnen kann (in meinem Fall 1989-12-31), ist es leicht zu wissen, Offset. HEIGHT_FOR_WEEK * NUM_OF_WEEK ist sehr einfache Berechnung , um genauen Offset zu wissen.
Mein Problem ist das: Zuerst bekam ich Millisekunden Wert von Basisdatum. Und ich setze die Millisekunden auf ein anderes Kalenderobjekt. Ich habe dasselbe Datum von diesem Objekt erwartet. Aber eigentlich war es anderes Datum.
mBaseDateInMillis = mBaseDate.getTimeInMillis();
mAnotherDate.setTimeInMillis(mBaseDateInMillis);
/* I expect mBaseDate == mAnotherDate.
* but it was different.
*/
Hier ist mein Code:
public class CalendarCoordinate {
public static final long ONEWEEK_IN_MILLISECONDS = 60 * 60 * 24 * 7 * 1000;
public Calendar mBaseDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
public long mBaseDateInMillis = 0;
public Calendar mDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
public int mWeekHeight = 30;
/**
* CTOR
*/
public CalendarCoordinate() {
/* Base date is 1989-12-31 0, 0, 0
* It was Sunday and offset 0 will be mapped onto this day.
*/
mBaseDate.set(Calendar.MILLISECOND, 0);
mBaseDate.set(1989, 12, 31, 0, 0, 0);
mBaseDateInMillis = mBaseDate.getTimeInMillis();
Log.v(TAG, "BaseDate:" + mBaseDate.toString());
}
/**
* Compute DATE from Y-Offset
* @param yOffset
* @return
*/
public Calendar dateFromYOffset(int yOffset) {
long nthWeeks = yOffset/mWeekHeight;
long millsSinceBaseDate = nthWeeks * ONEWEEK_IN_MILLISECONDS;
mDate.clear();
mDate.set(Calendar.MILLISECOND, 0);
mDate.setTimeInMillis(mBaseDateInMillis + millsSinceBaseDate);
/* We SHOULD call to update mDate internal data structure.
* Java is really strange for this thing
**/
mDate.getTimeInMillis();
return mDate;
}
/**
* Compute Y-Offset from DATE
* @param date
* @return
*/
public long yOffsetFromDate(Calendar cal) {
long mills = cal.getTimeInMillis();
long nthWeeks = (mills - mBaseDateInMillis)/ONEWEEK_IN_MILLISECONDS;
return nthWeeks * mWeekHeight;
}
}
Wer kann mir helfen? Ich bin kein guter Java-Programmierer.