2013-12-13 20 views
0

我在這裏有一個問題,希望有人可以幫助我。如何以編程方式在Infopath的「Time」類型的兩個字段上執行數學運算

我在infopath中創建了一個計時卡,並希望根據用戶輸入的值自動執行一些計算。我最初使用規則組合來完成這項工作,不幸的是,一旦表單處於SharePoint之內,我會遇到「無限循環」警告,因爲它執行的計算超過16次。

所以,我決定切換到c#,使計算更容易。但是,我不確定如何實際地將時間字段解析爲日期時間變量,並且在這種情況下,使用谷歌搜索並沒有太多朋友,因爲每個人都在提供「無代碼」解決方案。

我能找到this爲例,這是接近到我想要的東西,但他們似乎是想利用DateTime.ParseExact()日期字段。

我讓我的表單將時間字段的值轉換爲字符串,只是爲了測試值來查看我得到的值。例如,我使用了8:01 AM,並得到以下字符串值:"08:01:00-08:00"

我得到的值的第一部分是表示8:01毫秒毫秒,我甚至不知道破折號後面的部分應該表示什麼?

有誰知道我可能會將其轉換爲C#中的datetime變量,以便我可以對其進行一些計算?任何幫助在這裏會很感激。預先感謝您的時間。

+0

什麼是您的確切日期字段看起來像它是哪種格式,只有完整日期或時間 – dbw

+0

我想要進行計算的字段只是時間。 – user1389971

+0

你永遠不會解釋你的時間是什麼格式。字符串是什麼樣的? – Alan

回答

0

正如你說的字符串是在時間格式,而試圖格式化他們對DateTime我們可以用TimeSpan

static void Main(string[] args) 
{ 
    string[] dateValues = { "08:01 AM", "08:01 PM" }; 
    string[] pattern = new string[] { @"hh\:mm\ \A\M", @"hh\:mm\ \P\M" }; 

    DateTime parsedDate; 
    TimeSpan interval = new TimeSpan(); 
    foreach (string dateValue in dateValues) 
    { 
     if (TimeSpan.TryParseExact(dateValue, pattern, null, out interval)) 
      Console.WriteLine("{0} --> {1}", dateValue, interval.ToString("c")); 
     else 
      Console.WriteLine("Unable to parse '{0}'", dateValue); 
    } 
} 

可能這可以幫助你以不同的方式一點點接近你的問題。

既然你正在談論的計算,我相信你會需要24小時制時間,讓您可以調整代碼和檢查TimeSpanPM格式解析,然後你可以根據你的計算執行那。

您可以參考MSDN documentation瞭解更多詳細信息。

+0

感謝您的回覆。我試圖對此進行測試,但InfoPath 2010使用的Visual Studio Tools for Applications中沒有這些內容(除非需要添加引用)。不支持var(我只是替換了字符串),但TimeSpan沒有TryParseExact()的定義,或者允許ToString方法像在interval.ToString(「C」)中那樣指定字符。這讓我以不同的方式思考事情......雖然我以前沒有遇到過TimeSpan。 – user1389971

+0

你可以用'string'代替'var' – dbw

+0

是的,我確實這麼做了。好的,所以我的想法實際上是抓取字段值,使用Substring(0,shiftStart.IndexOf(「 - 」),所以我只抓住相關的時間部分來創建一個dateTime對象,我將任意日期追加到(DateTime TrueShiftStart = DateTime.Parse(shiftstartpart,System.Globalization.CultureInfo.InvariantCulture);)然後,使用TimeSpan獲取所有涉及的數學,但我認爲你一定會把我放在正確的道路上。 ? – user1389971

相關問題