forked from amkovkov/GranuSightSoftware2
feat: SampleCalibration View and ViewModel
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
using System.Globalization;
|
||||
|
||||
using Avalonia.Data.Converters;
|
||||
|
||||
namespace GSS2.UI.Core.Converters;
|
||||
|
||||
public class DateTimeConverter : IValueConverter
|
||||
{
|
||||
private static readonly string[][] FORMATS =
|
||||
{
|
||||
["dd", "d"],
|
||||
["."],
|
||||
["MM", "M"],
|
||||
["."],
|
||||
["yyyy", "yy"],
|
||||
[" "],
|
||||
["HH", "H"],
|
||||
[":"],
|
||||
["mm", "m"],
|
||||
[":"],
|
||||
["ss", "s"]
|
||||
};
|
||||
private static readonly string[] ALL_FORMATS = FORMATS
|
||||
.Aggregate(new List<string> { "" }, (acc, segments) =>
|
||||
acc.SelectMany(a => segments.Select(s => a + s)).ToList())
|
||||
.ToArray();
|
||||
|
||||
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is not DateTime dateTime)
|
||||
return Avalonia.Data.BindingNotification.ExtractError(new FormatException($"Не удаётся распознать значение \"{value}\" как дату и время"));
|
||||
|
||||
return dateTime.ToLocalTime().ToString("dd.MM.yyyy HH:mm:ss");
|
||||
}
|
||||
|
||||
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is not string str)
|
||||
return Avalonia.Data.BindingNotification.ExtractError(new FormatException($"Не удаётся распознать значение \"{value}\" как дату и время"));
|
||||
|
||||
var success = DateTime.TryParseExact(str, ALL_FORMATS, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var dateTime);
|
||||
if (!success)
|
||||
return Avalonia.Data.BindingNotification.ExtractError(new FormatException($"Не удаётся распознать строку \"{str}\" как дату и время"));
|
||||
|
||||
return dateTime.ToUniversalTime();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user