public final static String date(long millis) {
		long secs = millis / 1000;
		long mins = secs / 60;
		long hours = mins / 60;
		long days = hours / 24;
		final long years = days / 365;
		long year = 1970 + years;
		days -= getDays(year);
		if (days < 0) {
			if (isLeap(--year)) {
				days += 366;
			} else {
				days += 365;
			}
		}
		int month = 0;
		if (days > Time.daysOfMonth[month]) {
			days -= Time.daysOfMonth[month++];
			final int daysFeb;
			if (isLeap(year)) {
				daysFeb = Time.daysOfMonth[month] + 1;
			} else {
				daysFeb = Time.daysOfMonth[month];
			}
			if (days > daysFeb) {
				days -= daysFeb;
				month++;
				while (days > Time.daysOfMonth[month]) {
					days -= Time.daysOfMonth[month++];
				}
			}
		}
		final String timeString = String.format("%02d:%02d:%02d", ++hours % 24,
				++mins % 60, ++secs % 60)
				+ " "
				+ ++days
				+ " "
				+ ++month
				+ " "
				+ year;
		// System.out.println("calculated: " + timeString + " ("
		// + getMonthName(String.valueOf(month)) + ")");
		return timeString;
	}