mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-29 12:48:47 +00:00
修复Axis的Time时间轴无法显示大于2038的年份的问题
This commit is contained in:
@@ -80,6 +80,8 @@ slug: /changelog
|
|||||||
|
|
||||||
## master
|
## master
|
||||||
|
|
||||||
|
* (2025.04.07) 修复`Gantt`甘特图年份大于2038时显示异常的问题
|
||||||
|
* (2025.04.07) 修复`Axis`的`Time`时间轴无法显示大于2038的年份的问题
|
||||||
* (2025.04.06) 修复`Axis`的`Time`时间轴在有`DataZoom`缩放时文本显示异常的问题
|
* (2025.04.06) 修复`Axis`的`Time`时间轴在有`DataZoom`缩放时文本显示异常的问题
|
||||||
* (2025.03.28) 修复`Pie3D`的`avoidLabelOverlap`不生效的问题
|
* (2025.03.28) 修复`Pie3D`的`avoidLabelOverlap`不生效的问题
|
||||||
* (2025.03.27) 增加`Legend`的`itemInactiveOpacity`可设置非激活状态时的颜色透明度 (#343)
|
* (2025.03.27) 增加`Legend`的`itemInactiveOpacity`可设置非激活状态时的颜色透明度 (#343)
|
||||||
|
|||||||
@@ -364,7 +364,7 @@ namespace XCharts
|
|||||||
{
|
{
|
||||||
var lastCount = axis.context.labelValueList.Count;
|
var lastCount = axis.context.labelValueList.Count;
|
||||||
axis.context.tickValue = DateTimeUtil.UpdateTimeAxisDateTimeList(axis.context.labelValueList,
|
axis.context.tickValue = DateTimeUtil.UpdateTimeAxisDateTimeList(axis.context.labelValueList,
|
||||||
(int)axis.context.minValue, (int)axis.context.maxValue, axis.splitNumber);
|
axis.context.minValue, axis.context.maxValue, axis.splitNumber);
|
||||||
|
|
||||||
if (axis.context.labelValueList.Count != lastCount)
|
if (axis.context.labelValueList.Count != lastCount)
|
||||||
axis.SetAllDirty();
|
axis.SetAllDirty();
|
||||||
|
|||||||
@@ -487,7 +487,7 @@ namespace XCharts.Runtime
|
|||||||
private static string newFormatter = null;
|
private static string newFormatter = null;
|
||||||
public string GetFormatterDateTime(int labelIndex, int totalIndex, double value, double minValue, double maxValue)
|
public string GetFormatterDateTime(int labelIndex, int totalIndex, double value, double minValue, double maxValue)
|
||||||
{
|
{
|
||||||
var timestamp = (int)value;
|
var timestamp = value;
|
||||||
var dateTime = DateTimeUtil.GetDateTime(timestamp);
|
var dateTime = DateTimeUtil.GetDateTime(timestamp);
|
||||||
var dateString = string.Empty;
|
var dateString = string.Empty;
|
||||||
if (string.IsNullOrEmpty(numericFormatter) || numericFormatter.Equals("f2"))
|
if (string.IsNullOrEmpty(numericFormatter) || numericFormatter.Equals("f2"))
|
||||||
|
|||||||
@@ -53,24 +53,24 @@ namespace XCharts.Runtime
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int GetTimestamp()
|
public static double GetTimestamp()
|
||||||
{
|
{
|
||||||
return (int)(DateTime.Now - k_LocalDateTime1970).TotalSeconds;
|
return (DateTime.Now - k_LocalDateTime1970).TotalSeconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int GetTimestamp(DateTime time, bool local = false)
|
public static double GetTimestamp(DateTime time, bool local = false)
|
||||||
{
|
{
|
||||||
if (local)
|
if (local)
|
||||||
{
|
{
|
||||||
return (int)(time - k_LocalDateTime1970).TotalSeconds;
|
return (time - k_LocalDateTime1970).TotalSeconds;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return (int)(time - k_DateTime1970).TotalSeconds;
|
return (time - k_DateTime1970).TotalSeconds;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int GetTimestamp(string dateTime, bool local = false)
|
public static double GetTimestamp(string dateTime, bool local = false)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -88,7 +88,7 @@ namespace XCharts.Runtime
|
|||||||
return local ? k_LocalDateTime1970.AddSeconds(timestamp) : k_DateTime1970.AddSeconds(timestamp);
|
return local ? k_LocalDateTime1970.AddSeconds(timestamp) : k_DateTime1970.AddSeconds(timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetDefaultDateTimeString(int timestamp, double range = 0)
|
public static string GetDefaultDateTimeString(double timestamp, double range = 0)
|
||||||
{
|
{
|
||||||
var dateString = String.Empty;
|
var dateString = String.Empty;
|
||||||
var dateTime = GetDateTime(timestamp);
|
var dateTime = GetDateTime(timestamp);
|
||||||
@@ -144,7 +144,7 @@ namespace XCharts.Runtime
|
|||||||
/// <param name="minTimestamp"></param>
|
/// <param name="minTimestamp"></param>
|
||||||
/// <param name="maxTimestamp"></param>
|
/// <param name="maxTimestamp"></param>
|
||||||
/// <param name="splitNumber"></param>
|
/// <param name="splitNumber"></param>
|
||||||
internal static float UpdateTimeAxisDateTimeList(List<double> list, int minTimestamp, int maxTimestamp, int splitNumber)
|
internal static float UpdateTimeAxisDateTimeList(List<double> list, double minTimestamp, double maxTimestamp, int splitNumber)
|
||||||
{
|
{
|
||||||
var range = maxTimestamp - minTimestamp;
|
var range = maxTimestamp - minTimestamp;
|
||||||
if (range <= 0)
|
if (range <= 0)
|
||||||
@@ -157,7 +157,7 @@ namespace XCharts.Runtime
|
|||||||
int tick = 0;
|
int tick = 0;
|
||||||
if (range >= ONE_YEAR * MIN_TIME_SPLIT_NUMBER)
|
if (range >= ONE_YEAR * MIN_TIME_SPLIT_NUMBER)
|
||||||
{
|
{
|
||||||
var num = splitNumber <= 0 ? GetSplitNumber(range, ONE_YEAR) : Math.Max(range / (splitNumber * ONE_YEAR), 1);
|
var num = splitNumber <= 0 ? GetSplitNumber(range, ONE_YEAR) : (int)Math.Max(range / (splitNumber * ONE_YEAR), 1);
|
||||||
var dtStart = GetDateTime(GetFirstMaxValue(list, minTimestamp));
|
var dtStart = GetDateTime(GetFirstMaxValue(list, minTimestamp));
|
||||||
dtStart = new DateTime(dtStart.Year, dtStart.Month, 1);
|
dtStart = new DateTime(dtStart.Year, dtStart.Month, 1);
|
||||||
while (dtStart > dtMin)
|
while (dtStart > dtMin)
|
||||||
@@ -178,7 +178,7 @@ namespace XCharts.Runtime
|
|||||||
}
|
}
|
||||||
else if (range >= ONE_MONTH * MIN_TIME_SPLIT_NUMBER)
|
else if (range >= ONE_MONTH * MIN_TIME_SPLIT_NUMBER)
|
||||||
{
|
{
|
||||||
var num = splitNumber <= 0 ? GetSplitNumber(range, ONE_MONTH) : Math.Max(range / (splitNumber * ONE_MONTH), 1);
|
var num = splitNumber <= 0 ? GetSplitNumber(range, ONE_MONTH) : (int)Math.Max(range / (splitNumber * ONE_MONTH), 1);
|
||||||
var dtStart = GetDateTime(GetFirstMaxValue(list, minTimestamp));
|
var dtStart = GetDateTime(GetFirstMaxValue(list, minTimestamp));
|
||||||
dtStart = new DateTime(dtStart.Year, dtStart.Month, 1);
|
dtStart = new DateTime(dtStart.Year, dtStart.Month, 1);
|
||||||
while (dtStart > dtMin)
|
while (dtStart > dtMin)
|
||||||
@@ -197,42 +197,32 @@ namespace XCharts.Runtime
|
|||||||
dtStart = dtStart.AddMonths(num);
|
dtStart = dtStart.AddMonths(num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (range >= ONE_DAY * MIN_TIME_SPLIT_NUMBER)
|
|
||||||
{
|
|
||||||
tick = GetTickSecond(range, splitNumber, ONE_DAY);
|
|
||||||
var let = minTimestamp % tick;
|
|
||||||
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
|
||||||
list.Clear();
|
|
||||||
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
|
||||||
}
|
|
||||||
else if (range >= ONE_HOUR * MIN_TIME_SPLIT_NUMBER)
|
|
||||||
{
|
|
||||||
tick = GetTickSecond(range, splitNumber, ONE_HOUR);
|
|
||||||
var let = minTimestamp % tick;
|
|
||||||
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
|
||||||
list.Clear();
|
|
||||||
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
|
||||||
}
|
|
||||||
else if (range >= ONE_MINUTE * MIN_TIME_SPLIT_NUMBER)
|
|
||||||
{
|
|
||||||
tick = GetTickSecond(range, splitNumber, ONE_MINUTE);
|
|
||||||
var let = minTimestamp % tick;
|
|
||||||
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
|
||||||
list.Clear();
|
|
||||||
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tick = GetTickSecond(range, splitNumber, ONE_SECOND);
|
int tickSecond;
|
||||||
|
if (range >= ONE_DAY * MIN_TIME_SPLIT_NUMBER) tickSecond = ONE_DAY;
|
||||||
|
else if (range >= ONE_HOUR * MIN_TIME_SPLIT_NUMBER) tickSecond = ONE_HOUR;
|
||||||
|
else if (range >= ONE_MINUTE * MIN_TIME_SPLIT_NUMBER) tickSecond = ONE_MINUTE;
|
||||||
|
else tickSecond = ONE_SECOND;
|
||||||
|
tick = GetTickSecond(range, splitNumber, tickSecond);
|
||||||
var let = minTimestamp % tick;
|
var let = minTimestamp % tick;
|
||||||
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
|
var defaultTimestamp = let == 0 ? minTimestamp : minTimestamp - let + tick;
|
||||||
|
var startTimestamp = (int)GetFirstMaxValue(list, minTimestamp, defaultTimestamp);
|
||||||
|
while (startTimestamp > minTimestamp)
|
||||||
|
{
|
||||||
|
startTimestamp -= tick;
|
||||||
|
}
|
||||||
|
if (startTimestamp < minTimestamp)
|
||||||
|
{
|
||||||
|
startTimestamp += tick;
|
||||||
|
}
|
||||||
list.Clear();
|
list.Clear();
|
||||||
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
|
||||||
}
|
}
|
||||||
return tick;
|
return tick;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static double GetFirstMaxValue(List<double> list, int minTimestamp)
|
private static double GetFirstMaxValue(List<double> list, double minTimestamp, double defaultTimestamp = 0)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < list.Count; i++)
|
for (int i = 0; i < list.Count; i++)
|
||||||
{
|
{
|
||||||
@@ -241,10 +231,10 @@ namespace XCharts.Runtime
|
|||||||
return list[i];
|
return list[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return minTimestamp;
|
return defaultTimestamp == 0 ? minTimestamp : defaultTimestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int GetSplitNumber(int range, int tickSecond)
|
private static int GetSplitNumber(double range, int tickSecond)
|
||||||
{
|
{
|
||||||
var num = 1;
|
var num = 1;
|
||||||
while (range / (num * tickSecond) > 8)
|
while (range / (num * tickSecond) > 8)
|
||||||
@@ -254,12 +244,12 @@ namespace XCharts.Runtime
|
|||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int GetTickSecond(int range, int splitNumber, int tickSecond)
|
private static int GetTickSecond(double range, int splitNumber, int tickSecond)
|
||||||
{
|
{
|
||||||
var num = 0;
|
var num = 0;
|
||||||
if (splitNumber > 0)
|
if (splitNumber > 0)
|
||||||
{
|
{
|
||||||
num = Math.Max(range / (splitNumber * tickSecond), 1);
|
num = (int)Math.Max(range / (splitNumber * tickSecond), 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -274,7 +264,7 @@ namespace XCharts.Runtime
|
|||||||
return num * tickSecond;
|
return num * tickSecond;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddTickTimestamp(List<double> list, int startTimestamp, int maxTimestamp, int tickSecond)
|
private static void AddTickTimestamp(List<double> list, double startTimestamp, double maxTimestamp, int tickSecond)
|
||||||
{
|
{
|
||||||
while (startTimestamp <= maxTimestamp)
|
while (startTimestamp <= maxTimestamp)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user