2011-06-16 139 views
7

我有兩個字符串變量 - time1time2。兩者都包含格式爲HH:MM的值。如何檢查:如何比較當前時間與時間範圍?

  1. 如果當前的時間內 time1time2?
  2. time1在最近的 小時會發生什麼?

Upd。 我已經實施了以下操作將time1轉換爲Date格式。但它使用折舊方法:

Date clTime1 = new Date(); 

SimpleDateFormat timeParser = new SimpleDateFormat("HH:mm", Locale.US); 
try { 
    clTime1 = timeParser.parse(time1); 
} catch (ParseException e) { 
} 

Calendar now = Calendar.getInstance(); 
clTime1.setYear(now.get(Calendar.YEAR) - 1900); 
clTime1.setMonth(now.get(Calendar.MONTH)); 
clTime1.setDate(now.get(Calendar.DAY_OF_MONTH)); 
System.out.println(clTime1.toString()); 
+0

如果我使用'java.sql.Time',那麼我可以很容易地從時間價值我的字符串 - 'Time.valueOf(time1).getTime()'。但是,我應該如何以相同的格式(「長」)獲取當前時間? – 2011-06-16 19:45:41

回答

21
  • 轉換兩個字符串Date 對象(這也是時間的對象) 創建一個新的Date對象。
  • 這將包含當前時間 。
  • 使用Date.before()和Date.after()方法中的 來確定您是否處於時間間隔 。

編輯:您應該可以直接使用這個(沒有過時的方法)

public static final String inputFormat = "HH:mm"; 

private Date date; 
private Date dateCompareOne; 
private Date dateCompareTwo; 

private String compareStringOne = "9:45"; 
private String compareStringTwo = "1:45"; 

SimpleDateFormat inputParser = new SimpleDateFormat(inputFormat, Locale.US); 

private void compareDates(){ 
    Calendar now = Calendar.getInstance(); 

    int hour = now.get(Calendar.HOUR); 
    int minute = now.get(Calendar.MINUTE); 

    date = parseDate(hour + ":" + minute); 
    dateCompareOne = parseDate(compareStringOne); 
    dateCompareTwo = parseDate(compareStringTwo); 

    if (dateCompareOne.before(date) && dateCompareTwo.after(date)) { 
     //yada yada 
    } 
} 

private Date parseDate(String date) { 

    try { 
     return inputParser.parse(date); 
    } catch (java.text.ParseException e) { 
     return new Date(0); 
    } 
} 
+0

@CaspNZ,我試過這樣做,但沒有得到如何將字符串以我的格式(不像* 20081013T160000Z *)轉換爲'Date'。你能幫助我嗎? – 2011-06-16 19:41:30

+0

@DArkO - 它看起來像一些日期_constructors_已棄用,但在我上面的示例中使用解析器不被棄用 - 我認爲這仍然受支持。 – 2011-06-16 19:55:54

+0

@CaspNZ,好吧,我現在有我的字符串日期:1970年1月1日+我的時間1。我怎樣才能得到與1970年1月1日相同的日期呢? – 2011-06-16 20:07:14

1

查找到Calendar類。它有方法來支持你所要求的。日期不推薦使用,不建議使用。

這裏是API的鏈接。 Calendar

關於用法。首先,您需要撥打Calendar.getInstance()來創建日曆對象。 接下來,您需要使用cal.set(Calendar.HOUR, your hours)Calendar.MINUTES以相同的方式設置兩個字段。接下來,您可以在函數之前或之後調用比較函數來獲取所需的信息。你也可以在當前語言環境中獲取當前時間的實例。

0

截至目前,我正在考慮以下方法:

int clTime = Integer.parseInt(time1.substring(0, 1))*60 + Integer.parseInt(time1.substring(3, 4)); 

Time now = new Time(); 
now.setToNow(); 
int nowTime = now.hour*60 + now.minute; 

所以,我需要比較只是整數值clTimenowTime

+0

如果檢查在*範圍*內的一段時間內,你需要考慮溢出情況,也就是說,開始時間晚於停止時間,實際上,無論採用何種編碼方式,情況都是如此。開始喜歡你的解決方案來重複每日時間範圍檢查。 – pmont 2013-08-18 11:21:35

3
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); 

Date EndTime = dateFormat.parse("10:00"); 

Date CurrentTime = dateFormat.parse(dateFormat.format(new Date())); 

if (CurrentTime.after(EndTime)) 
{ 
    System.out.println("timeeee end "); 
} 

如果你想晚上11點之間比較的時間爲早上6點多計算票價的夜晚任何運載工具不要忘了用try catch塊

1

例如包圍。那麼下面的代碼將幫助你。

//代碼

package com.example.timedate; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.TimeZone; 

import android.os.Bundle; 
import android.app.Activity; 
import android.text.format.DateFormat; 
import android.text.format.Time; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    TextView tv; 
    Button bt; 
    int hour,min; 
    String AM_PM; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tv = (TextView)findViewById(R.id.textView1); 
     bt = (Button)findViewById(R.id.button1); 



     final String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());*/ 

     bt.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 


       Calendar c = Calendar.getInstance(); 
       hour = c.get(Calendar.HOUR_OF_DAY); 
       min = c.get(Calendar.MINUTE); 
       int ds = c.get(Calendar.AM_PM); 
       if(ds==0) 
       AM_PM="am"; 
       else 
       AM_PM="pm"; 

       Toast.makeText(MainActivity.this, ""+hour+":"+min+AM_PM, Toast.LENGTH_SHORT).show(); 
       if((hour==11&&AM_PM.matches("pm")) || (hour<7&&AM_PM.matches("am")) || (hour==12&&AM_PM.matches("am"))) 
       { 
        Toast.makeText(MainActivity.this, "Time is between the range", Toast.LENGTH_SHORT).show(); 
       } 
       else 
        Toast.makeText(MainActivity.this, "Time is not between the range", Toast.LENGTH_SHORT).show(); 

      } 
     }); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

}` 
2

這是我使用和它的工作對我來說:

public static boolean isTimeWith_in_Interval(String valueToCheck, String endTime, String startTime) { 
    boolean isBetween = false; 
    try { 
     Date time1 = new SimpleDateFormat("HH:mm:ss").parse(endTime); 

     Date time2 = new SimpleDateFormat("HH:mm:ss").parse(startTime); 

     Date d = new SimpleDateFormat("HH:mm:ss").parse(valueToCheck); 

     if (time1.after(d) && time2.before(d)) { 
      isBetween = true; 
     } 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    return isBetween; 
} 
相關問題