日期与X轴点的转换

项目管理软件中渲染甘特图时,将日期转换为X轴上的点,以及将X轴上的点转换回日期,是最基本的计算之一。本文将介绍背后的基本数学原理,并展示如何在Java中实现这些转换。

首先,需要了解这些计算背后的基本数学原理。算法可以适用于任何单位,但本文中将使用像素作为单位。其次,选择天数作为时间单位,但根据需求,其他单位(如秒、分钟等)同样适用。

转换公式

要将日期转换为X轴上的点,需要知道以下信息:

  • D:要转换的日期
  • S:X轴起始(最左端)的日期
  • W:一天的宽度(以像素为单位)

有了这三个信息,可以使用一个简单的公式来计算X值:

X = (D - S) * W

要将点转换回日期,只需解上述方程求D:

D = (X / W) + S

使用代码实现

这个类需要跟踪S和W,即公式中的起始日期和每天的宽度。还需要一个常量来将毫秒转换为天数。

private Date start = null; private double dayWidth = 0; private double lengthOfDayInMs = 86400000f;

要实例化并初始化这个类,提供一个构造函数,传入S和W:

public PointConverter(Date start, float width) { this.dayWidth = width; this.start = start; }

转换函数使用上面的公式(需要将天数转换为毫秒以确保单位一致):

public float dateToPoint(Date d) { long elapsed = d.getTime() - start.getTime(); double daysPast = ((float)(elapsed / lengthOfDayInMs)); return ((float)(daysPast * dayWidth)); } public Date pointToDate(float x) { long elapsed = start.getTime() + ((long)((x / dayWidth) * lengthOfDayInMs)); return new Date(elapsed); } public void update(Date start, float width) { this.start = start; this.dayWidth = width; }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485