簡體   English   中英

使用自定義時間獲取當前日期

[英]Get current Date with custom time

我有一些時間Strings例如"09:00""17:30" ,我需要檢查當前時間是否在該范圍內。

我以為可以比較一下:

SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date now = new Date();
Date begin;
Date end;

begin = format.parse(begin_string);
end = format.parse(end_string);

if (now.compareTo(begin) > 0 && end.compareTo(now) > 0)
    return true;
else
    return false;

原來,當我解析字符串時,可以正確解析時間,但是日期設置為1970年1月1日。這樣,代碼將始終返回false

我想知道如何將begin日期和end日期設置為當前日期,但要設置其字符串中的時間。

您也可以像下面這樣在當前時間重復使用格式對象:

SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date now = new Date();
String time = format.format(now); // format to wall time loosing current date
System.out.println(time);
now = format.parse(time); // reparse wall time
System.out.println(now);

因此,您now隱式地使用系統的標准時區轉換為1970,然后可以將其用於與beginend直接比較。

Date begin = format.parse("09:00");
Date end = format.parse("21:30");
return (begin.before(now) && end.after(now)); // open-bounded interval
  • 獲取當前時間, Calendar.getInstance();
  • 獲取另外兩個當前時間實例,並根據您的輸入設置時間字段

例如:

Calendar.set(Calendar.HOUR_OF_DAY, 1);
  • 並在時間范圍內調用compare()

您應該真正使用Calendar 然后,您可以根據從字符串解析的值分別設置小時和分鍾。 然后獲取時間(以毫秒為單位)並進行比較。

Date now = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(now);
cal.set(Calendar.HOUR_OF_DAY, hours);
cal.set(Calendar.MINUTE, minutes);
long time = cal.getTimeInMillis();

您還可以使用精彩的Joda庫。 我認為Joda是使用Dates and Times的更好的方法。

捆綁的java.util.Date和.Calendar類非常麻煩。 避免他們。 使用Joda-Time庫或Java 8中新的java.time包 (受Joda-Time啟發,由JSR 310定義)。

如果您確實不關心時區或日期,請使用Joda-Time LocalTime類或java.time LocalTime類。

警告:幼稚的程序員經常認為他們只需要本地時間,因此可以忽略時區,但后悔要為這個位置感到遺憾。

喬達時代

如果您的時間采用正確的ISO 8601格式(24小時,正確的數字位數),則可以直接將字符串輸入傳遞給LocalTime的構造函數,而無需進行解析。 該類具有內置的ISO 8601樣式解析器。

String inputStart = "09:00";
String inputStop = "17:30";

LocalTime start = new LocalTime( inputStart );
LocalTime stop = new LocalTime( inputStop );

LocalTime now = LocalTime.now();

// Comparing using Half-Open logic, where beginning is inclusive and ending is exclusive.
boolean isNowContainedWithinInterval = ( ( now.isEqual( start ) ) || ( now.isAfter( start ) ) ) && ( now.isBefore( stop ) );

轉儲到控制台...

System.out.println( "start: " + start );
System.out.println( "stop: " + stop );
System.out.println( "now: " + now );
System.out.println( "isNowContainedWithinInterval: " + isNowContainedWithinInterval );

運行時...

start: 09:00:00.000
stop: 17:30:00.000
now: 12:42:06.567
isNowContainedWithinInterval: true

在現實世界中,我將添加一個斷言測試以證明停止時間晚於開始時間,以驗證輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM