DateTimeValueSerializer.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Base / System / Windows / Markup / DateTimeValueSerializer.cs / 1 / DateTimeValueSerializer.cs

                            /****************************************************************************\
*
* File: DateTimeValueSerializer.cs 
*
\***************************************************************************/ 
 
using System.Globalization;
using System.Text; 

namespace System.Windows.Markup
{
 
    //+-------------------------------------------------------------------------------------
    // 
    //  DateTimeValueSerializer 
    //
    //  This class converts DateTime values to/from string.  We don't use the DateTimeConverter 
    //  because it doesn't support custom cultures, and in Xaml we require the converter to
    //  support en-us culture.
    //
    //+------------------------------------------------------------------------------------- 

    ///  
    ///     ValueSerializer for DateTime. 
    /// 
 
    public class DateTimeValueSerializer : ValueSerializer
    {
        /// 
        ///     Initializes a new instance of the  class. 
        /// 
        public DateTimeValueSerializer() 
        { 
        }
 
        /// 
        ///     Indicate that we do convert DateTime's from string.
        /// 
 
        public override bool CanConvertFromString(string value, IValueSerializerContext context)
        { 
            return true; 
        }
 
        /// 
        ///     Indicate that we do convert a DateTime to string.
        /// 
 
        public override bool CanConvertToString(object value, IValueSerializerContext context)
        { 
            // Validate the input type 
            if ( !(value is DateTime))
            { 
                throw new ArgumentException(SR.Get(SRID.General_Expected_Type, "DateTime"), "value");
            }

            return true; 
        }
 
        ///  
        ///     Converts the given value object to a .
        ///  

        public override object ConvertFromString(string value, IValueSerializerContext context)
        {
            // Validate and clean up input. 

            if( value == null ) 
            { 
                throw GetConvertFromException(value);
            } 

            if( value.Length == 0 )
            {
                return DateTime.MinValue; 
            }
 
            // Get a DateTimeFormatInfo 

            CultureInfo culture = CultureInfo.GetCultureInfo("en-US"); 
            DateTimeFormatInfo dateTimeFormatInfo;

            dateTimeFormatInfo = (DateTimeFormatInfo)culture.GetFormat(typeof(DateTimeFormatInfo));
 
            // Set the formatting style for round-tripping and to trim the string.
 
            DateTimeStyles dateTimeStyles = DateTimeStyles.RoundtripKind 
                      | DateTimeStyles.NoCurrentDateDefault
                      | DateTimeStyles.AllowLeadingWhite 
                      | DateTimeStyles.AllowTrailingWhite;

            // Create the DateTime, using the DateTimeInfo if possible, and the culture otherwise.
 
            if (dateTimeFormatInfo != null)
            { 
                return DateTime.Parse(value, dateTimeFormatInfo, dateTimeStyles); 
            }
            else 
            {
                // The culture didn't have a DateTimeFormatInfo.
                return DateTime.Parse(value, culture, dateTimeStyles);
            } 

 
        } 

 

        /// 
        ///     Converts the given value object to a  using the arguments.
        ///  

        public override string ConvertToString(object value, IValueSerializerContext context) 
        { 
            if( value == null || !(value is DateTime))
            { 
                throw GetConvertToException( value, typeof(string) );
            }

            DateTime dateTime = (DateTime)value; 

            // Build up the format string to be used in DateTime.ToString() 
            StringBuilder formatString = new StringBuilder("yyyy-MM-dd"); 

            if (dateTime.TimeOfDay.TotalSeconds == 0) 
            {
                // The time portion of this DateTime is exactly at midnight.
                // We don't include the time component if the Kind is unspecified.
                // Otherwise, we're going to be including the time zone info, so'll 
                // we'll have to include the time.
 
                if( dateTime.Kind != DateTimeKind.Unspecified ) 
                {
                    formatString.Append("'T'HH':'mm"); 
                }
            }

            else 
            {
                // We're going to write out at least the hours/minutes 
                formatString.Append("'T'HH':'mm"); 

                if (dateTime.TimeOfDay.Seconds != 0 || dateTime.TimeOfDay.Milliseconds != 0) 
                {
                    // We have seconds, so we'll write them out too.
                    formatString.Append("':'ss");
 
                    if (dateTime.TimeOfDay.Milliseconds != 0)
                    { 
                        // And we have milliseconds 
                        formatString.Append("'.'FFFFFFF");
                    } 
                }
            }

            // Add the format specifier that indicates we want the DateTimeKind to be 
            // included in the output formulation -- UTC gets written out with a "Z",
            // and Local gets written out with e.g. "-08:00" for Pacific Standard Time. 
 
            formatString.Append("K");
 
            // We've finally got our format string built, we can create the string.

            return dateTime.ToString(formatString.ToString(), CultureInfo.GetCultureInfo("en-US") );
 
        }
 
    } 

} 


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK