【问题标题】:Need basic help formatting date/time for JFreeChart TimeSeries需要基本帮助格式化 JFreeChart TimeSeries 的日期/时间
【发布时间】:2021-11-22 19:22:43
【问题描述】:

我需要一些基本的帮助来格式化日期/时间,以便我可以将它添加到我的 JFreeChart TimeSeries。因为我的代码添加了重复项,所以我在第二次循环中得到了错误。

我有一个我们在医疗保健中使用的温度传感器,我需要绘制每 30 分钟读取一次的温度。所以我需要我的 x 轴是月-日-小时-分钟,但我只是不知道如何正确格式化我的时间。下面的行是我遇到的具体问题是“ timeSeries.add(new Day(gc.getTime()), temp );”

自从大学以来已经很长时间了,所以我很抱歉,我想我很接近但无法缩小差距。任何帮助将不胜感激。

谢谢!升

输出

2021 年 11 月 20 日星期六 12:41:00 PST:72.5 F
TimeSeries.add 2021 年 11 月 20 日
2021 年 11 月 20 日星期六 13:11:00 PST:70.7 F
TimeSeries.add 2021 年 11 月 20 日

添加重复项时出现运行时错误

线程“main”org.jfree.data.general.SeriesException 中的异常:您正在尝试添加 2021 年 11 月 20 日期间的观察,但该系列已包含该时间段的观察。不允许重复。尝试使用 addOrUpdate() 方法。

at org.jfree.data.time.TimeSeries.add(TimeSeries.java:701)
at org.jfree.data.time.TimeSeries.add(TimeSeries.java:746)
at org.jfree.data.time.TimeSeries.add(TimeSeries.java:732)
at dumpMission.main(dumpMission.java:212)


TimeSeries timeSeries = new TimeSeries("Date");
TimeSeriesCollection timeSeriesCollectionTemps = new TimeSeriesCollection();
long time = time_stamp.getTime().getTime() + owc.getFirstLogOffset(state);

GregorianCalendar gc = new GregorianCalendar();
for (int i = 0; i < log.length; i++){

     gc.setTime(new Date(time));
    System.out.println(gc.getTime() + ": " +  Convert.toFahrenheit(owc.decodeTemperature(log [i])) + " F");
    time += sample_rate * 60 * 1000;
    
    double temp = Convert.toFahrenheit(owc.decodeTemperature(log [i]));
    System.out.println("TimeSeries.add " + new Day(gc.getTime()));
    //add needs org.jfree.data.time.RegularTimePeriod
    //need to plot month-day-hour-minute
    timeSeries.add(new Day(gc.getTime()), temp );  // NEED HELP to get into unique month/day/hour/minute
    timeSeriesCollectionTemps.addSeries(timeSeries);
}

【问题讨论】:

    标签: java datetime jfreechart


    【解决方案1】:

    如图here,你可以实例化Minute或者任何合适的RegularTimePeriod来获得想要的效果。如图here,您可以使用SimpleDateFormatZonedDateTime 解析您的采样日期;下面的例子使用了前者。

    import java.awt.Dimension;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.TimeZone;
    import javax.swing.JFrame;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.DateAxis;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    import org.jfree.data.time.Minute;
    import org.jfree.data.time.TimeSeries;
    import org.jfree.data.time.TimeSeriesCollection;
    import org.jfree.data.xy.XYDataset;
    
    /**
     * @see https://stackoverflow.com/q/70071299/230513
     * @see https://stackoverflow.com/a/12481509/230513
     */
    public class TimeTest {
    
        private static XYDataset createDataset() throws ParseException {
            SimpleDateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
            TimeSeries series = new TimeSeries("Temperature");
            series.add(new Minute(f.parse("Sat Nov 20 12:41:00 PST 2021")), 72.5);
            series.add(new Minute(f.parse("Sat Nov 20 13:11:00 PST 2021")), 70.7);
            return new TimeSeriesCollection(series);
        }
    
        private static JFreeChart createChart(final XYDataset dataset) {
            SimpleDateFormat f = new SimpleDateFormat("HH:mm");
            f.setTimeZone(TimeZone.getTimeZone("PST"));
            JFreeChart chart = ChartFactory.createTimeSeriesChart(
                "Test", "Time", "Temperture °F", dataset, true, true, false);
            XYPlot plot = (XYPlot) chart.getPlot();
            XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer();
            r.setDefaultShapesVisible(true);
            DateAxis domain = (DateAxis) plot.getDomainAxis();
            domain.setDateFormatOverride(f);
            domain.setVerticalTickLabels(true);
            return chart;
        }
    
        public static void main(String[] args) throws ParseException {
    
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            XYDataset dataset = createDataset();
            JFreeChart chart = createChart(dataset);
            ChartPanel chartPanel = new ChartPanel(chart) {
    
                @Override
                public Dimension getPreferredSize() {
                    return new Dimension(400, 250);
                }
            };
            f.add(chartPanel);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2017-11-02
      • 2012-02-24
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      相关资源
      最近更新 更多