2011-12-06 16 views
16

मैं इस लाइन के साथ सी # में इस सेटिंग कर रहा हूँ: के रूप में यह उम्मीदHTTP प्रतिक्रिया हेडर, के लिए प्रारूप "समय-सीमा समाप्त"

WebOperationContext.Current.OutgoingResponse.Headers.Add(HttpResponseHeader.Expires, DateTime.Now.AddSeconds(10).ToString()); 

अब मुझे पता है प्रारूप इस पर बंद है निम्नलिखित: मंगल, 06 दिसंबर 2011 20 : 24: 15 जीएमटी

क्या .NET कार्यान्वयन IFormatProvider में कोई कक्षा है, मैं यहां लाभ उठा सकता हूं? या मुझे अपना खुद का निर्माण करने की आवश्यकता होगी?

उत्तर

13

आप Custom Date and Time Format Strings उपयोग कर सकते हैं।

मंगल, 06 दिसंबर 2011 20:24:15 GMT

उत्पन्न इसलिए की तरह ऊपर प्रारूप:

DateTime.Now.AddDays(30).ToUniversalTime() 
    .ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'"); 
+10

सावधान रहें, यह कोड संस्कृति असंवेदनशील नहीं है और सर्वर लोकेल का उपयोग कर तारीख को प्रारूपित करेगा। आपको या तो 'thedate.ToString ("R") 'या' thedate.ToString ("ddd, dd MMM yyyy hH: mm: ss' जीएमटी '", डेटटाइमफॉर्मैट इंफो। इन्विरिएंटइन्फो) का उपयोग करना चाहिए,' –

+0

बेशक, आपको अभी भी कॉल करना होगा '.ToUniversalTime()'। –

+0

जैसा स्टीव बी और जोनोनो [नीचे उत्तर] में सुझाया गया है (http://stackoverflow.com/a/17079611/361762), प्रारूप स्ट्रिंग "आर" ऐसा करने का सबसे अच्छा तरीका है। जैसे 'DateTime.UtcNow.AddDays (30) .ToString (" R ")' – dave

-7

मैं इस बना दी:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace WcfService1 
{ 
    public static class HttpExpiresFormat 
    { 

     private enum Month 
     { 
      Jan = 1, Feb = 2, Mar = 3, Apr = 4, May = 5, Jun = 6, Jul = 7, Aug = 8, Sept = 9, Oct = 10, Nov = 11, Dec = 12 
     } 


     public static string HttpExpireDate(double secondsToAdd) 
     { 
      DateTime dateTime = DateTime.Now; 

      string dayOfWeek = ConvertDayToSmall(dateTime.DayOfWeek.ToString()); 
      string day = dateTime.Day < 10 ? "0" + dateTime.Day.ToString() : dateTime.Day.ToString(); 
      string month = ((Month)dateTime.Month).ToString(); 
      string year = dateTime.Year.ToString(); 
      char[] trim = new char[] { '.' }; 
      string substring = dateTime.AddHours(5).AddSeconds(secondsToAdd).TimeOfDay.ToString(); 
      string time = substring.Remove(substring.LastIndexOf('.')) + " GMT"; 

      return string.Format("{0}, {1} {2} {3} {4}", dayOfWeek, day, month, year, time); 
     } 

     private static string ConvertDayToSmall(string day) 
     { 
      switch (day) 
      { 
       case "Monday": 
        return "Mon"; 
       case "Tuesday": 
        return "Tue"; 
       case "Wednesday": 
        return "Wed"; 
       case "Thursday": 
        return "Thu"; 
       case "Friday": 
        return "Fri"; 
       default: 
        return null; 
      } 
     } 
    } 
} 
26

मैं DateTime.UtcNow.AddDays(30).ToString("R")

का उपयोग MSDN से:

"आर" या "आर" मानक प्रारूप विनिर्देश एक कस्टम दिनांक और समय प्रारूप स्ट्रिंग का प्रतिनिधित्व करता है जिसे DateTimeFormatInfo.RFC1123Pattern संपत्ति द्वारा परिभाषित किया गया है। पैटर्न परिभाषित मानक को दर्शाता है, और संपत्ति केवल पढ़ने के लिए है। इसलिए, यह हमेशा इस्तेमाल की जाने वाली संस्कृति या प्रारूप प्रदाता की परवाह किए बिना समान है। कस्टम प्रारूप स्ट्रिंग "ddd, dd MMM yyyy hH ':' mm ':' ss 'जीएमटी' है। जब इस मानक प्रारूप विनिर्देशक का उपयोग किया जाता है, तो स्वरूपण या पार्सिंग ऑपरेशन हमेशा इनवेरिएंट संस्कृति का उपयोग करता है

+0

यह * निश्चित रूप से * इसे करने का सही तरीका है! – mortb

+0

यह स्वीकार्य उत्तर होना चाहिए। – Art

1

आपको स्ट्रिंग पास करने और शीर्षलेख सेट करने की आवश्यकता नहीं है।

WebOperationContext.Current.OutgoingResponse.LastModified = DateTime.Now; // DataTime.UtcNow; 

तुम भी wory को UTC समय गुजर के बारे में, यह आप के लिए यह संभालती है की जरूरत नहीं है: आप सभी की जरूरत है, LastModified गुण सेट करने के लिए है।

संबंधित मुद्दे