【问题标题】:PeriodAxis incorrect TimeZonePeriodAxis 不正确的时区
【发布时间】:2013-02-05 15:33:03
【问题描述】:

使用 DateAxis 可以正常工作:

// From: 2/5/13 02:00:00 PM (+1), To: 2/5/13 03:00:00 PM (+1)
// Configuring dataset
Timezone tz = new SimpleTimeZone(1, "Test");
TimeSeriesCollection dataset = new TimeSeriesCollection(tz);
TimeSeries timeSeries = new TimeSeries("Series1");
...
timeSeries.add(new Millisecond(new Date(timestamp1), tz, locale), value1);
timeSeries.add(new Millisecond(new Date(timestamp2), tz, locale), value2);
timeSeries.add(new Millisecond(new Date(timestamp3), tz, locale), value3);
...
// Setting axis timezone
((DateAxis) chart.getXYPlot().getDomainAxis()).setTimeZone(tz);
((DateAxis) chart.getXYPlot().getDomainAxis()).setRange(new DateRange(
           from, to), true, true);

但是当我尝试对 PeriodAxis 执行相同操作时,它显示的时区不正确。看起来它正在从我的计算机获取时区 (-3)。

// From: 2/5/13 02:00:00 PM (+1), To: 2/5/13 03:00:00 PM (+1)
// Configuring dataset
Timezone tz = new SimpleTimeZone(1, "Test");
TimeSeriesCollection dataset = new TimeSeriesCollection(tz);
TimeSeries timeSeries = new TimeSeries("Series1");
...
timeSeries.add(new Millisecond(new Date(timestamp1), tz, locale), value1);
timeSeries.add(new Millisecond(new Date(timestamp2), tz, locale), value2);
timeSeries.add(new Millisecond(new Date(timestamp3), tz, locale), value3);
...
// Setting periodAxis
PeriodAxis periodaxis = new PeriodAxis("");

periodaxis.setFirst(new Millisecond(new Date(from), tz));
periodaxis.setLast(new Millisecond(new Date(to), tz));

periodaxis.setTimeZone(tz);

periodaxis.setRange(new DateRange(from, to), true, true);
periodaxis.setAutoRangeTimePeriodClass(Second.class);
PeriodAxisLabelInfo aperiodaxislabelinfo[] = new PeriodAxisLabelInfo[2];
aperiodaxislabelinfo[0] = new PeriodAxisLabelInfo(
        org.jfree.data.time.Minute.class, new SimpleDateFormat("mm"));
aperiodaxislabelinfo[1] = new PeriodAxisLabelInfo(
        org.jfree.data.time.Hour.class, new SimpleDateFormat("HH"));
periodaxis.setLabelInfo(aperiodaxislabelinfo);

chart.getXYPlot().setDomainAxis(periodaxis);

【问题讨论】:

    标签: java timezone jfreechart


    【解决方案1】:

    找到了两种方法来解决这个问题:

    第一

    SimpleDateFormat上设置时区:

    ...
    SimpleDateFormat dfMin = new SimpleDateFormat("mm");
    dfMin.setTimeZone(tz); // Setting timezone
    PeriodAxisLabelInfo aperiodaxislabelinfo[] = new PeriodAxisLabelInfo[2];
    aperiodaxislabelinfo[0] = new PeriodAxisLabelInfo(
            org.jfree.data.time.Minute.class, dfMin);
    SimpleDateFormat dfHour = new SimpleDateFormat("mm");
    dfHour.setTimeZone(tz); // Setting timezone
    aperiodaxislabelinfo[1] = new PeriodAxisLabelInfo(
            org.jfree.data.time.Hour.class, dfHour);
    periodaxis.setLabelInfo(aperiodaxislabelinfo);
    ...
    

    第二

    也将此报告为bug,IMO 轴必须遵守periodaxis.setTimeZone(tz); 指令。此行应添加到PeriodAxis.java

    885        while (p.getFirstMillisecond() <= axisMax) {
    886            float x = (float) valueToJava2D(p.getMiddleMillisecond(), dataArea,
    887                    edge);
    888            DateFormat df = this.labelInfo[band].getDateFormat();
    
                   df.setTimeZone(timeZone); // Missing timezone setting
    
    889            String label = df.format(new Date(p.getMiddleMillisecond()));
    890            long first = p.getFirstMillisecond();
    891            long last = p.getLastMillisecond();
    892            if (last > axisMax) {
    

    【讨论】:

      猜你喜欢
      • 2018-06-07
      • 2018-10-21
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多