2016-05-15 20 views
-2

私はIIS上で実行されているWebサイトを2つの時間変数をとり、それらの変数を計算し、Minutes(例えば、StartTime = "18:00"、EndTime = "18: 30 "、Diff =" -30 ")時差の計算AndroidおよびiOS

これは、DateDiff()関数を使用してVBScriptで完全に機能しています。私は高低を探して、AndroidとiOSの両方で同様のソリューションを探していましたので、モバイルアプリに時間計算を組み込み、回線を利用できるようにします(インターネット接続がない場合など)。

これは私がVBScriptで使用したコードの一部です:

//Grab the values from the form controls 


    occtime = occDate.Value //from form controls 
    testTime = testDate.Value //from form controls 

    //work out the time difference in minutes. Should always a negative number. 
    timeCalc = DateDiff("n", testTime, occtime) 

時間変数、HHのいずれかの使用:MMのか、完全な日付DD/MM/YYYYのHHを使用した:MMは私に結果を与えるだろう、私はしかし、私はこれをiOS(Swift)またはAndroid Studioで動作させるのに苦労しています。

アドバイスをいただきありがとうございます。 iOS用

+0

私は」あなたのサイトの開発を見て、あなたはアルゴリズムをテストしてもらえますか? –

+0

こんにちはアレッサンドロ。全体の目的は、BAC(Blood Alcohol Content)の計算です。例えば、Occurence時間はペロスンが止まった時間、Test Timeは人が正式呼吸テストを行った時間、Drager Resultは呼吸装置からのBAC読み込み時間である。 – Nick

+0

すごい!私はちょうどここに似たようなサイトを見た:http://www.etilometro-online.it/おそらく役に立つかもしれない –

答えて

0

のXCodeのplaygorundにこのスウィフトのコードを試してください。

import Foundation 

let curerntDate = NSDate() 
let futureDate = NSDate(timeInterval: 36*60*60, sinceDate: curerntDate) 

let currentCalendar = NSCalendar.currentCalendar() 
let differenceDateComponents = currentCalendar.components([.Era, .Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: curerntDate, toDate: futureDate, options: NSCalendarOptions(rawValue: 0)) 
print(differenceDateComponents) 
+0

ありがとう。私はそれを試して、私がどのように行っているかを知らせます。もしあなたが好きなら、あなたは実際のVBScriptサイトを見ることができます:https://webbreath.azurewebsites.net – Nick

0

スウィフト2.2互換の拡張機能:Android用

extension NSDate { 
     func yearsFrom(date:NSDate) -> Int{ 
      return NSCalendar.currentCalendar().components(.Year, fromDate: date, toDate: self, options: []).year 
     } 
     func monthsFrom(date:NSDate) -> Int{ 
      return NSCalendar.currentCalendar().components(.Month, fromDate: date, toDate: self, options: []).month 
     } 
     func weeksFrom(date:NSDate) -> Int{ 
      return NSCalendar.currentCalendar().components(.WeekOfYear, fromDate: date, toDate: self, options: []).weekOfYear 
     } 
     func daysFrom(date:NSDate) -> Int{ 
      return NSCalendar.currentCalendar().components(.Day, fromDate: date, toDate: self, options: []).day 
     } 
     func hoursFrom(date:NSDate) -> Int{ 
      return NSCalendar.currentCalendar().components(.Hour, fromDate: date, toDate: self, options: []).hour 
     } 
     func minutesFrom(date:NSDate) -> Int{ 
      return NSCalendar.currentCalendar().components(.Minute, fromDate: date, toDate: self, options: []).minute 
     } 
     func secondsFrom(date:NSDate) -> Int{ 
      return NSCalendar.currentCalendar().components(.Second, fromDate: date, toDate: self, options: []).second 
     } 
     func offsetFrom(date:NSDate) -> String { 
      if yearsFrom(date) > 0 { return "\(yearsFrom(date))y" } 
      if monthsFrom(date) > 0 { return "\(monthsFrom(date))M" } 
      if weeksFrom(date) > 0 { return "\(weeksFrom(date))w" } 
      if daysFrom(date) > 0 { return "\(daysFrom(date))d" } 
      if hoursFrom(date) > 0 { return "\(hoursFrom(date))h" } 
      if minutesFrom(date) > 0 { return "\(minutesFrom(date))m" } 
      if secondsFrom(date) > 0 { return "\(secondsFrom(date))s" } 
      return "" 
     } 
    } 

をこれらの方法は良い作業:

public static int calcDaysDiff(Date day1, Date day2) { 
     Date d1 = new Date(day1.getTime()); 
     Date d2 = new Date(day2.getTime()); 
     Calendar date1 = Calendar.getInstance(); 
     date1.setTime(d1); 
     Calendar dateCpy = (Calendar) date1.clone(); 
     Calendar date2 = Calendar.getInstance(); 
     date2.setTime(d2); 
     //checks if the start date is later then the end date - gives 0 if it is 
     if (date1.get(Calendar.YEAR) >= date2.get(Calendar.YEAR)) { 
     if (date1.get(Calendar.DAY_OF_YEAR) >= date2.get(Calendar.DAY_OF_YEAR)) { 
      return 0; 
     } 
     } 
     //checks if there is a daylight saving change between the two dates 
     boolean isDate1Summer = TimeZone.getDefault().inDaylightTime(d1); 
     boolean isDate2Summer = TimeZone.getDefault().inDaylightTime(d2); 
     int offset = 0; 
     //check if there as been a change in winter/summer time and adds/reduces an hour 
     if (isDate1Summer && !isDate2Summer) { 
      offset = 1; 
     } 
     if (!isDate1Summer && isDate2Summer) { 
      offset = -1; 
     } 
     return calcDaysDiffAux(dateCpy, date2) + checkFullDay(dateCpy, date2, offset); 
    } 

    // check if there is a 24 hour diff between the 2 dates including the daylight saving offset 
    public static int checkFullDay(Calendar day1, Calendar day2, int offset) { 
     if (day1.get(Calendar.HOUR_OF_DAY) <= day2.get(Calendar.HOUR_OF_DAY) + offset) { 
      return 0; 
     } 
     return -1; 
    } 

    // find the number of days between the 2 dates. check only the dates and not the hours 
    public static int calcDaysDiffAux(Calendar day1, Calendar day2) { 
     Calendar dayOne = (Calendar) day1.clone(), 
       dayTwo = (Calendar) day2.clone(); 

     if (dayOne.get(Calendar.YEAR) == dayTwo.get(Calendar.YEAR)) { 
      return Math.abs(dayOne.get(Calendar.DAY_OF_YEAR) - dayTwo.get(Calendar.DAY_OF_YEAR)); 
     } else { 
      if (dayTwo.get(Calendar.YEAR) > dayOne.get(Calendar.YEAR)) { 
       //swap them 
       Calendar temp = dayOne; 
       dayOne = dayTwo; 
       dayTwo = temp; 
      } 
      int extraDays = 0; 

      while (dayOne.get(Calendar.YEAR) > dayTwo.get(Calendar.YEAR)) { 
       dayOne.add(Calendar.YEAR, -1); 
       // getActualMaximum() important for leap years 
       extraDays += dayOne.getActualMaximum(Calendar.DAY_OF_YEAR); 
      } 
      return extraDays - dayTwo.get(Calendar.DAY_OF_YEAR) + dayOne.get(Calendar.DAY_OF_YEAR); 
     } 
    }