【发布时间】:2015-05-02 02:43:32
【问题描述】:
m0skit0 在.Net 中。八行代码。用 Java 显示它。如果你认为你可以证明它。
Dim StartDate As Date = Now
Dim EndDate As Date = Now
EndDate = EndDate.AddSeconds(15)
Dim Months As Long = DateDiff(DateInterval.Month, StartDate, EndDate)
Dim Days As Long = DateDiff(DateInterval.Day, StartDate, EndDate)
Dim Hours As Long = DateDiff(DateInterval.Hour, StartDate, EndDate)
Dim Minutes As Long = DateDiff(DateInterval.Minute, StartDate, EndDate)
Dim Seconds As Long = DateDiff(DateInterval.Second, StartDate, EndDate)
下面的代码是错误的。以 Calendar cal2 = 开头的后半部分将在 TimerTask 中计算两次之间的差异并将其分解为月、日、小时、分钟和秒。
在顶部,我得到当前日期/时间,然后添加 15 秒。然后尝试计算差异。它似乎取决于我添加到第二个日期的时间。这几天我一直在为此苦苦挣扎。在某一时刻,除了工作时间是 4 小时之外,一切都匹配了,但我是 GMT+8,所以这没有任何意义。这就是我在时区(UTC)中添加的内容。我阅读了有关 Joda 时间的信息,但我对 Java 和 Android 仍然很陌生,并且在多次尝试安装这些库并回到纯 Java 之后。痛苦。
设计日期/时间的 Java 要么是疯子,要么是受虐狂,要么两者兼而有之。
(在 .Net 中这是 8 行代码。八行!)
Calendar cal = Calendar.getInstance();
TimeZone UTC = TimeZone.getTimeZone("UTC");
cal.setTimeZone(UTC);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR);
int minutes = cal.get(Calendar.MINUTE);
int seconds = cal.get(Calendar.SECOND);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
endDate = dateFormat.parse(String.valueOf(year) + "-" + String.valueOf(month)
+ "-" + String.valueOf(day) + " " + String.valueOf(hour)
+ ":" + String.valueOf(minutes) + ":" + String.valueOf(seconds +15));
dateFormat.setTimeZone(UTC);
} catch (ParseException ex) {
Log.d("ParseException", ex.toString());
}
Calendar cal2 = Calendar.getInstance();
TimeZone UTC2 = TimeZone.getTimeZone("UTC");
cal.setTimeZone(UTC2);
Date beginDate = cal.getTime();
long millis = endDate.getTime() - beginDate.getTime();
if (TimeZone.getDefault().inDaylightTime( new Date())) {
millis += 3600000;
}
String Months = (new SimpleDateFormat("M")).format(new Date(millis));
String Days = (new SimpleDateFormat("d")).format(new Date(millis));
String Hours = (new SimpleDateFormat("h")).format(new Date(millis));
String Minutes = (new SimpleDateFormat("m")).format(new Date(millis));
String Seconds = (new SimpleDateFormat("s")).format(new Date(millis));
【问题讨论】: