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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ModifiableIteratorCollection.cs
- ContractMapping.cs
- securitycriticaldataClass.cs
- WindowHideOrCloseTracker.cs
- ListBase.cs
- TextParagraphProperties.cs
- Help.cs
- CardSpaceShim.cs
- PackageRelationshipCollection.cs
- DataGridColumnCollection.cs
- HotCommands.cs
- ManagedFilter.cs
- CatalogZone.cs
- QilXmlWriter.cs
- Rect3DValueSerializer.cs
- ExecutorLocksHeldException.cs
- UpdateCompiler.cs
- PolicyVersionConverter.cs
- SaveFileDialog.cs
- DataViewManager.cs
- CompressedStack.cs
- SqlProfileProvider.cs
- OracleParameterBinding.cs
- CapacityStreamGeometryContext.cs
- MemberDomainMap.cs
- StandardOleMarshalObject.cs
- InstallerTypeAttribute.cs
- PropertyCollection.cs
- SystemColorTracker.cs
- ModelService.cs
- DataGridColumnEventArgs.cs
- RevocationPoint.cs
- TypeExtensionSerializer.cs
- JobInputBins.cs
- CodeNamespaceImportCollection.cs
- DataGridViewImageCell.cs
- DisposableCollectionWrapper.cs
- PersistenceProvider.cs
- Unit.cs
- HeaderLabel.cs
- TextTrailingCharacterEllipsis.cs
- ConstNode.cs
- CodeStatement.cs
- EnglishPluralizationService.cs
- DataRecordInternal.cs
- TransformPattern.cs
- ExpressionBuilder.cs
- ParseElementCollection.cs
- externdll.cs
- SourceFileInfo.cs
- SqlBooleanMismatchVisitor.cs
- CacheRequest.cs
- AuthenticationService.cs
- SafeArchiveContext.cs
- ToolStripSystemRenderer.cs
- COM2TypeInfoProcessor.cs
- SemaphoreFullException.cs
- OSEnvironmentHelper.cs
- InstanceDataCollectionCollection.cs
- Graphics.cs
- OracleColumn.cs
- GetPageNumberCompletedEventArgs.cs
- ScrollItemProviderWrapper.cs
- GridToolTip.cs
- StateBag.cs
- LayoutEngine.cs
- ResourcePermissionBaseEntry.cs
- Queue.cs
- EllipseGeometry.cs
- MiniLockedBorderGlyph.cs
- XmlUnspecifiedAttribute.cs
- SqlTypeConverter.cs
- TemplateComponentConnector.cs
- CompositeCollection.cs
- ByteAnimation.cs
- SqlCharStream.cs
- WindowsSysHeader.cs
- FlowLayout.cs
- SafeEventLogWriteHandle.cs
- SizeF.cs
- XmlElementCollection.cs
- TextOptions.cs
- MetafileHeader.cs
- Constants.cs
- CompoundFileReference.cs
- KeyedCollection.cs
- BufferedGraphics.cs
- DataContractSerializer.cs
- ResourceAttributes.cs
- AssemblyNameUtility.cs
- ExpressionBuilder.cs
- XmlSchemaGroup.cs
- GeometryConverter.cs
- Pen.cs
- httpapplicationstate.cs
- Decorator.cs
- StringResourceManager.cs
- RequestQueryParser.cs
- XmlDigitalSignatureProcessor.cs
- NavigateEvent.cs