Functions/Conversion/DateFunction.cs
using Expressive.Expressions;
using System;
using System.Globalization;
namespace Expressive.Functions.Conversion
{
internal sealed class DateFunction : FunctionBase
{
#region FunctionBase Members
public override string Name => "Date";
public override object Evaluate(IExpression[] parameters, Context context)
{
this.ValidateParameterCount(parameters, -1, 1);
var objectToConvert = parameters[0].Evaluate(this.Variables);
// No point converting if there is nothing to convert.
if (objectToConvert is null) { return null; }
// Safely check for a format parameter.
if (parameters.Length > 1 &&
objectToConvert is string dateString)
{
var format = parameters[1].Evaluate(this.Variables);
if (format is string formatString)
{
return DateTime.ParseExact(dateString, formatString, context.CurrentCulture);
}
}
return Convert.ToDateTime(objectToConvert, context.CurrentCulture);
}
#endregion
}
}