我有"Monday, 9:30"
作爲字符串,並且我希望下個星期一的Date
與時間9:30作爲java.util.Date
。我怎麼做?在Java中將星期+時間(hh:mm)轉換爲日期
回答
您可以創建一個與您的字符串匹配的SimpleDateFormat。然後,您將使用該類的.parse()
方法將您的字符串轉換爲Date
。有關更詳細的答案,請參閱this question。
或者,您可以創建一個Calendar對象,並解析您的字符串以設置其適當的字段,然後使用.getTime()
來提取Date
。
編輯 受Gilbert Le Blanc的回答的啓發,我更簡單地製作了他的測試用例。我使用的步驟是:
- 使用
SimpleDateFormat
解析給定字符串包括日期,生產日期在1970年 - 調整任何DST抵消
- 計算有多少個星期,在過去的解析日期是。
- 將此週數添加到過去的日期,以使其成爲下一個未來日期。我的程序的
測試輸出相匹配吉爾伯特(在我的時區):
Monday, 9:30 --> Mon May 23 09:30:00 PDT 2016
Friday, 16:45 --> Fri May 20 16:45:00 PDT 2016
Wednesday, 22:15 --> Wed May 18 22:15:00 PDT 2016
你可以調整的基礎上你真的「下一步」的意思的做法。這是我的完整代碼:
package foo.bar;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DayTime {
public static final long MILLISECONDS_PER_WEEK = 7L * 24 * 60 * 60 * 1000;
public static void main(String[] args) {
getDate("Monday, 9:30");
getDate("Friday, 16:45");
getDate("Wednesday, 22:15");
}
private static void getDate(String input) {
// Parse given date. Convert this to milliseconds since epoch. This will
// result in a date during the first week of 1970.
SimpleDateFormat sdf = new SimpleDateFormat("E, H:mm");
Date date = sdf.parse(input, new ParsePosition(0));
// Convert to millis and adjust for offset between today's Daylight
// Saving Time (default for the sdf) and the 1970 date
Calendar c = Calendar.getInstance();
int todayDSTOffset = c.get(Calendar.DST_OFFSET);
c.setTime(date);
int epochDSTOffset = c.get(Calendar.DST_OFFSET);
long parsedMillis = date.getTime() + (epochDSTOffset - todayDSTOffset);
// Calculate how many weeks ago that was
long millisInThePast = System.currentTimeMillis() - parsedMillis;
long weeksInThePast = millisInThePast/MILLISECONDS_PER_WEEK;
// Add that number of weeks plus 1
Date output = new Date(parsedMillis + (weeksInThePast + 1) * MILLISECONDS_PER_WEEK);
System.out.println(input + " --> " + output);
}
}
我寫了一個轉換程序。這裏是測試結果。
Monday, 9:30 --> Mon May 23 09:30:00 MDT 2016
Friday, 16:45 --> Fri May 20 16:45:00 MDT 2016
Wednesday, 22:15 --> Wed May 18 22:15:00 MDT 2016
我假設輸入時間是24小時時間。我在山區時區(MDT)。日期結果將在您運行此代碼的任何時區中。
我還假設如果今天的工作日與輸入的工作日相同,我輸出今天的日期。隨意添加代碼來檢查當前時間,以查看約會是今天還是下週。我認爲這超出了要求的範圍。
下面是我如何創建日期輸出。
我用「,」分割輸入。
我用當前日期和時間創建了一個Calendar對象。
我將星期幾文本轉換爲星期幾整數。
我添加了到達下一個週日整數所需的天數。
我使用SimpleDateFormat解析時間部分,並將時間複製到Calendar對象。
這是代碼。這並不簡單。
package com.ggl.testing;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DayTime {
public static void main(String[] args) {
getDate("Monday, 9:30");
getDate("Friday, 16:45");
getDate("Wednesday, 22:15");
}
private static void getDate(String input) {
DayTime dayTime = new DayTime();
Date output = dayTime.createDate(input);
System.out.println(input + " --> " + output);
}
public Date createDate(String input) {
String[] parts = input.split(", ");
Calendar now = Calendar.getInstance();
setDate(parts, now);
setTime(parts[1], now);
return now.getTime();
}
private void setDate(String[] parts, Calendar now) {
int weekday;
switch (parts[0]) {
case "Sunday":
weekday = Calendar.SUNDAY;
break;
case "Monday":
weekday = Calendar.MONDAY;
break;
case "Tuesday":
weekday = Calendar.TUESDAY;
break;
case "Wednesday":
weekday = Calendar.WEDNESDAY;
break;
case "Thursday":
weekday = Calendar.THURSDAY;
break;
case "Friday":
weekday = Calendar.FRIDAY;
break;
default:
weekday = Calendar.SATURDAY;
break;
}
int currentWeekday = now.get(Calendar.DAY_OF_WEEK);
if (weekday == currentWeekday) {
return;
}
int difference = (weekday - currentWeekday + 7) % 7;
now.add(Calendar.DAY_OF_MONTH, difference);
}
@SuppressWarnings("deprecation")
private void setTime(String part, Calendar now) {
Date date = getTime(part);
if (date != null) {
now.set(Calendar.HOUR_OF_DAY, date.getHours());
now.set(Calendar.MINUTE, date.getMinutes());
now.set(Calendar.SECOND, date.getSeconds());
}
}
private Date getTime(String part) {
SimpleDateFormat sdf = new SimpleDateFormat("H:mm");
try {
return sdf.parse(part);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
}
由於'SimpleDateFormat'在內部使用了Calendar,並且有默認值(恰好在1970年),所以有點矯枉過正。只需解析1970年的日期,然後提前數週以使其「下週」即可完成。 –
- 1. 以HH:MM格式將日期時間轉換爲日期時間(日期設置爲今日)
- 2. 將日期轉換爲星期幾
- 3. MPXJ在.NET中的Java日期轉換爲.NET日期時間
- 4. 將Java日期轉換爲JSON日期時間
- 5. 將Java日期轉換爲其他時間日期格式
- 6. 將java對象轉換爲日期或日期時間
- 7. 將日期時間轉換爲時間
- 8. 從GPS星期數,星期幾到日期時間轉換
- 9. Java:日期時間轉換
- 10. 將MySQL日期轉換爲Java日期
- 11. Rails在'where'查詢中將日期時間轉換爲日期
- 12. 在sqlalchemy中將所選日期時間轉換爲日期
- 13. Java - 將日期時間轉換爲公曆日曆時間(日期)
- 14. 如何將日期時間轉換爲R中的第一個星期日
- 15. 如何將日期時間轉換爲java中的時間戳
- 16. 將C#日期時間轉換爲XML日期時間類型
- 17. 將日期和時間轉換爲日期+時間戳
- 18. 將時間和日期轉換爲mysql日期時間
- 19. 將日期時間轉換爲另一日期時間
- 20. 將日期,日期時間轉換爲時間戳
- 21. 將日期時間int轉換爲日期時間
- 22. 將當地日期時間轉換爲UTC日期時間
- 23. 如何將IronPython日期時間轉換爲.NET日期時間?
- 24. C#將日期時間轉換爲WCF日期時間格式
- 25. Python將秒轉換爲日期時間日期和時間
- 26. 將UTC日期時間轉換爲日期時間偏移
- 27. Perl - 將日期時間戳轉換爲日期時間對象
- 28. 將日期時間戳轉換爲日期時間
- 29. 將字符串日期時間轉換爲Ruby日期時間
- 30. 將XML日期時間轉換爲SQL日期時間
首先你需要一些代碼 – Reimeus
請在發佈之前先搜索Stack Overflow。 –