Changeset 7299 in josm


Ignore:
Timestamp:
2014-07-09T22:15:41+02:00 (5 years ago)
Author:
Don-vip
Message:

fix #10121 - Add a new look-and-feel preference to display ISO 8601 dates globally

Location:
trunk/src/org/openstreetmap/josm
Files:
2 added
1 deleted
30 edited
3 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java

    r7012 r7299  
    2727import org.openstreetmap.josm.data.osm.RelationMember;
    2828import org.openstreetmap.josm.data.osm.Way;
    29 import org.openstreetmap.josm.tools.DateUtils;
    3029import org.openstreetmap.josm.tools.Geometry;
    3130import org.openstreetmap.josm.tools.Predicate;
     31import org.openstreetmap.josm.tools.date.DateUtils;
    3232
    3333/**
  • trunk/src/org/openstreetmap/josm/data/gpx/WayPoint.java

    r7005 r7299  
    1212import org.openstreetmap.josm.data.coor.LatLon;
    1313import org.openstreetmap.josm.data.projection.Projections;
    14 import org.openstreetmap.josm.tools.PrimaryDateParser;
     14import org.openstreetmap.josm.tools.date.PrimaryDateParser;
    1515import org.openstreetmap.josm.tools.template_engine.TemplateEngineDataProvider;
    1616
  • trunk/src/org/openstreetmap/josm/data/imagery/WmsCache.java

    r7132 r7299  
    1414import java.lang.ref.SoftReference;
    1515import java.net.URLConnection;
    16 import java.text.SimpleDateFormat;
    1716import java.util.ArrayList;
    1817import java.util.Calendar;
     
    4544import org.openstreetmap.josm.tools.ImageProvider;
    4645import org.openstreetmap.josm.tools.Utils;
     46import org.openstreetmap.josm.tools.date.DateUtils;
    4747
    4848public class WmsCache {
     
    558558
    559559    public static String printDate(Calendar c) {
    560         return (new SimpleDateFormat("yyyy-MM-dd")).format(c.getTime());
     560        return DateUtils.newIsoDateFormat().format(c.getTime());
    561561    }
    562562
  • trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java

    r7005 r7299  
    4646import org.openstreetmap.josm.gui.mappaint.xml.XmlStyleSource;
    4747import org.openstreetmap.josm.gui.widgets.JosmTextArea;
    48 import org.openstreetmap.josm.tools.DateUtils;
    4948import org.openstreetmap.josm.tools.GBC;
    5049import org.openstreetmap.josm.tools.Geometry;
    5150import org.openstreetmap.josm.tools.WindowGeometry;
     51import org.openstreetmap.josm.tools.date.DateUtils;
    5252
    5353/**
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java

    r7019 r7299  
    9090
    9191    /**
    92      * Property to enable dyanmic buttons globally.
     92     * Property to enable dynamic buttons globally.
    9393     * @since 6752
    9494     */
  • trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java

    r6214 r7299  
    1717import org.openstreetmap.josm.data.osm.Changeset;
    1818import org.openstreetmap.josm.data.osm.User;
     19import org.openstreetmap.josm.tools.date.DateUtils;
    1920
    2021/**
     
    9091            setText("");
    9192        } else {
    92             setText(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(d));
     93            setText(DateUtils.formatDateTime(d, DateFormat.SHORT, DateFormat.SHORT));
    9394        }
    9495        setToolTipText("");
  • trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java

    r7005 r7299  
    4141import org.openstreetmap.josm.gui.widgets.JosmTextField;
    4242import org.openstreetmap.josm.tools.ImageProvider;
     43import org.openstreetmap.josm.tools.date.DateUtils;
    4344
    4445/**
     
    225226        }
    226227        tfUser.setText(msg);
    227         DateFormat sdf = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
     228        DateFormat sdf = DateUtils.getDateTimeFormat(DateFormat.SHORT, DateFormat.SHORT);
    228229
    229230        tfCreatedOn.setText(cs.getCreatedAt() == null ? "" : sdf.format(cs.getCreatedAt()));
  • trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java

    r7187 r7299  
    10651065
    10661066        public String getStandardTooltipText() {
     1067            Date date = new Date();
    10671068            return  tr(
    10681069                    "Please enter a date in the usual format for your locale.<br>"
     
    10711072                    + "Example: {2}<br>"
    10721073                    + "Example: {3}<br>",
    1073                     DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()).format(new Date()),
    1074                     DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault()).format(new Date()),
    1075                     DateFormat.getDateInstance(DateFormat.LONG, Locale.getDefault()).format(new Date()),
    1076                     DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()).format(new Date())
     1074                    DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()).format(date),
     1075                    DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault()).format(date),
     1076                    DateFormat.getDateInstance(DateFormat.LONG, Locale.getDefault()).format(date),
     1077                    DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()).format(date)
    10771078            );
    10781079        }
     
    11291130
    11301131        public String getStandardTooltipText() {
     1132            Date date = new Date();
    11311133            return tr(
    11321134                    "Please enter a valid time in the usual format for your locale.<br>"
     
    11351137                    + "Example: {2}<br>"
    11361138                    + "Example: {3}<br>",
    1137                     DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault()).format(new Date()),
    1138                     DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.getDefault()).format(new Date()),
    1139                     DateFormat.getTimeInstance(DateFormat.LONG, Locale.getDefault()).format(new Date()),
    1140                     DateFormat.getTimeInstance(DateFormat.FULL, Locale.getDefault()).format(new Date())
     1139                    DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault()).format(date),
     1140                    DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.getDefault()).format(date),
     1141                    DateFormat.getTimeInstance(DateFormat.LONG, Locale.getDefault()).format(date),
     1142                    DateFormat.getTimeInstance(DateFormat.FULL, Locale.getDefault()).format(date)
    11411143            );
    11421144        }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java

    r6990 r7299  
    140140        try {
    141141            return ChangesetQuery.buildFromUrlQuery(query);
    142         } catch(ChangesetQueryUrlException e) {
     142        } catch (ChangesetQueryUrlException e) {
     143            Main.warn(e.getMessage());
    143144            return null;
    144145        }
  • trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java

    r7025 r7299  
    4646import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    4747import org.openstreetmap.josm.tools.CheckParameterUtil;
     48import org.openstreetmap.josm.tools.date.DateUtils;
    4849
    4950/**
     
    430431                HistoryOsmPrimitive p3 = getPrimitive(row);
    431432                if (p3 != null && p3.getTimestamp() != null)
    432                     return DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(p3.getTimestamp());
     433                    return DateUtils.formatDateTime(p3.getTimestamp(), DateFormat.SHORT, DateFormat.SHORT);
    433434                return null;
    434435            case 4:
  • trunk/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java

    r6865 r7299  
    3232import org.openstreetmap.josm.tools.GBC;
    3333import org.openstreetmap.josm.tools.Utils;
     34import org.openstreetmap.josm.tools.date.DateUtils;
    3435
    3536/**
    3637 * VersionInfoPanel is an UI component which displays the basic properties of a version
    3738 * of a {@link OsmPrimitive}.
    38  *
     39 * @since 1709
    3940 */
    4041public class VersionInfoPanel extends JPanel implements Observer{
     
    130131            String date = "?";
    131132            if (primitive.getTimestamp() != null) {
    132                 date = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(primitive.getTimestamp());
     133                date = DateUtils.formatDateTime(primitive.getTimestamp(), DateFormat.SHORT, DateFormat.SHORT);
    133134            }
    134135            text = tr(
     
    221222        updateText(cs, "source", lblChangesetSource, lblSource, oppCs, pnlChangesetSource);
    222223    }
    223    
     224
    224225    protected static void updateText(Changeset cs, String attr, JTextArea textArea, JLabel label, Changeset oppCs, JComponent container) {
    225226        final String text = cs != null ? cs.get(attr) : null;
  • trunk/src/org/openstreetmap/josm/gui/io/AbstractUploadTask.java

    r6336 r7299  
    3232import org.openstreetmap.josm.io.OsmApiInitializationException;
    3333import org.openstreetmap.josm.io.OsmApiPrimitiveGoneException;
    34 import org.openstreetmap.josm.tools.DateUtils;
    3534import org.openstreetmap.josm.tools.ExceptionUtil;
    3635import org.openstreetmap.josm.tools.ImageProvider;
    3736import org.openstreetmap.josm.tools.Pair;
     37import org.openstreetmap.josm.tools.date.DateUtils;
    3838
    3939public abstract class AbstractUploadTask extends PleaseWaitRunnable {
     
    196196                + "changeset {0} which was already closed at {1}.<br>"
    197197                + "Please upload again with a new or an existing open changeset.</html>",
    198                 changesetId, DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(d)
     198                changesetId, DateUtils.formatDateTime(d, DateFormat.SHORT, DateFormat.SHORT)
    199199        );
    200200        JOptionPane.showMessageDialog(
  • trunk/src/org/openstreetmap/josm/gui/io/ChangesetCellRenderer.java

    r7001 r7299  
    1515import org.openstreetmap.josm.data.osm.Changeset;
    1616import org.openstreetmap.josm.tools.ImageProvider;
     17import org.openstreetmap.josm.tools.date.DateUtils;
    1718
    1819/**
    1920 * A {@link ListCellRenderer} for the list of changesets in the upload dialog.
    2021 *
    21  *
     22 * @since 2115
    2223 */
    2324public class ChangesetCellRenderer extends JLabel implements ListCellRenderer<Changeset> {
     
    3738        sb.append("<strong>").append(tr("Changeset id:")).append("</strong>").append(cs.getId()).append("<br>");
    3839        if (cs.getCreatedAt() != null) {
    39             sb.append("<strong>").append(tr("Created at:")).append("</strong>").append(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(cs.getCreatedAt())).append("<br>");
     40            sb.append("<strong>").append(tr("Created at:")).append("</strong>").append(
     41                    DateUtils.formatDateTime(cs.getCreatedAt(), DateFormat.SHORT, DateFormat.SHORT)).append("<br>");
    4042        }
    4143        if (cs.get("comment") != null) {
  • trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java

    r7182 r7299  
    5757import org.openstreetmap.josm.tools.ImageProvider;
    5858import org.openstreetmap.josm.tools.Utils;
     59import org.openstreetmap.josm.tools.date.DateUtils;
    5960
    6061public class GpxLayer extends Layer {
     
    142143
    143144    /**
    144      * returns a human readable string that shows the timespan of the given track
     145     * Returns a human readable string that shows the timespan of the given track
     146     * @param trk The GPX track for which timespan is displayed
     147     * @return The timespan as a string
    145148     */
    146149    public static String getTimespanForTrack(GpxTrack trk) {
     
    148151        String ts = "";
    149152        if (bounds != null) {
    150             DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
     153            DateFormat df = DateUtils.getDateFormat(DateFormat.SHORT);
    151154            String earliestDate = df.format(bounds[0]);
    152155            String latestDate = df.format(bounds[1]);
    153156
    154157            if (earliestDate.equals(latestDate)) {
    155                 DateFormat tf = DateFormat.getTimeInstance(DateFormat.SHORT);
     158                DateFormat tf = DateUtils.getTimeFormat(DateFormat.SHORT);
    156159                ts += earliestDate + " ";
    157160                ts += tf.format(bounds[0]) + " - " + tf.format(bounds[1]);
    158161            } else {
    159                 DateFormat dtf = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
     162                DateFormat dtf = DateUtils.getDateTimeFormat(DateFormat.SHORT, DateFormat.SHORT);
    160163                ts += dtf.format(bounds[0]) + " - " + dtf.format(bounds[1]);
    161164            }
  • trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r7204 r7299  
    8080import org.openstreetmap.josm.gui.util.GuiHelper;
    8181import org.openstreetmap.josm.gui.widgets.JosmTextArea;
    82 import org.openstreetmap.josm.tools.DateUtils;
    8382import org.openstreetmap.josm.tools.FilteredCollection;
    8483import org.openstreetmap.josm.tools.GBC;
    8584import org.openstreetmap.josm.tools.ImageProvider;
     85import org.openstreetmap.josm.tools.date.DateUtils;
    8686
    8787/**
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java

    r7033 r7299  
    2424import java.io.IOException;
    2525import java.io.InputStream;
     26import java.text.DateFormat;
    2627import java.text.ParseException;
    2728import java.text.SimpleDateFormat;
     
    7677import org.openstreetmap.josm.tools.GBC;
    7778import org.openstreetmap.josm.tools.ImageProvider;
    78 import org.openstreetmap.josm.tools.PrimaryDateParser;
     79import org.openstreetmap.josm.tools.date.DateUtils;
     80import org.openstreetmap.josm.tools.date.PrimaryDateParser;
    7981import org.xml.sax.SAXException;
    8082
     
    236238        @Override
    237239        public void actionPerformed(ActionEvent arg0) {
    238             SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
     240            SimpleDateFormat dateFormat = (SimpleDateFormat) DateUtils.getDateTimeFormat(DateFormat.SHORT, DateFormat.SHORT);
    239241
    240242            panel = new JPanel();
     
    285287            gc.gridx = 2;
    286288            gc.weightx = 0.2;
    287             panelTf.add(new JLabel(tr(" [dd/mm/yyyy hh:mm:ss]")), gc);
     289            panelTf.add(new JLabel(" ["+dateFormat.toLocalizedPattern()+"]"), gc);
    288290
    289291            gc.gridx = 0;
     
    360362                    Date date = yLayer.data.get(index).getExifTime();
    361363                    if (date != null) {
    362                         lbExifTime.setText(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(date));
    363                         tfGpsTime.setText(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(date));
     364                        DateFormat df = DateUtils.getDateTimeFormat(DateFormat.SHORT, DateFormat.SHORT);
     365                        lbExifTime.setText(df.format(date));
     366                        tfGpsTime.setText(df.format(date));
    364367                        tfGpsTime.setCaretPosition(tfGpsTime.getText().length());
    365368                        tfGpsTime.setEnabled(true);
     
    371374                    }
    372375                }
    373 
    374376            });
    375377            panelLst.add(new JScrollPane(imgList), BorderLayout.CENTER);
     
    380382                @Override
    381383                public void actionPerformed(ActionEvent ae) {
    382                     JFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, false, null, JpegFileFilter.getInstance(), JFileChooser.FILES_ONLY, "geoimage.lastdirectory");
     384                    JFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, false, null, JpegFileFilter.getInstance(),
     385                            JFileChooser.FILES_ONLY, "geoimage.lastdirectory");
    383386                    if (fc == null)
    384387                        return;
     
    400403                    }
    401404                    if (date != null) {
    402                         lbExifTime.setText(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(date));
    403                         tfGpsTime.setText(new SimpleDateFormat("dd/MM/yyyy ").format(date));
     405                        lbExifTime.setText(DateUtils.getDateTimeFormat(DateFormat.SHORT, DateFormat.SHORT).format(date));
     406                        tfGpsTime.setText(DateUtils.getDateFormat(DateFormat.SHORT).format(date)+" ");
    404407                        tfGpsTime.setEnabled(true);
    405408                    } else {
     
    929932                    tfOffset.getDocument().addDocumentListener(statusBarUpdater);
    930933
    931                     lblMatches.setText(statusBarText.getText() + "<br>" + trn("(Time difference of {0} day)", "Time difference of {0} days", Math.abs(dayOffset), Math.abs(dayOffset)));
     934                    lblMatches.setText(statusBarText.getText() + "<br>" + trn("(Time difference of {0} day)",
     935                            "Time difference of {0} days", Math.abs(dayOffset), Math.abs(dayOffset)));
    932936
    933937                    statusBarUpdater.updateStatusBar();
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java

    r6822 r7299  
    2727import org.openstreetmap.josm.tools.ImageProvider;
    2828import org.openstreetmap.josm.tools.Shortcut;
     29import org.openstreetmap.josm.tools.date.DateUtils;
    2930
    3031public final class ImageViewerDialog extends ToggleDialog {
     
    5455    public static ImageViewerDialog getInstance() {
    5556        if (dialog == null)
    56             throw new AssertionError("a new instance needs to be created first"); 
     57            throw new AssertionError("a new instance needs to be created first");
    5758        return dialog;
    5859    }
     
    248249        if (entry != null) {
    249250            if (imageChanged) {
    250                 // Set only if the image is new to preserve zoom and position if the same image is redisplayed 
     251                // Set only if the image is new to preserve zoom and position if the same image is redisplayed
    251252                // (e.g. to update the OSD).
    252253                imgDisplay.setImage(entry.getFile(), entry.getExifOrientation());
     
    263264                osd.append(tr("\nDirection {0}\u00b0", Math.round(entry.getExifImgDir())));
    264265            }
    265             DateFormat dtf = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
     266            DateFormat dtf = DateUtils.getDateTimeFormat(DateFormat.SHORT, DateFormat.SHORT);
    266267            if (entry.hasExifTime()) {
    267268                osd.append(tr("\nEXIF time: {0}", dtf.format(entry.getExifTime())));
  • trunk/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java

    r7005 r7299  
    2626import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    2727import org.openstreetmap.josm.gui.widgets.UrlLabel;
    28 import org.openstreetmap.josm.tools.DateUtils;
    2928import org.openstreetmap.josm.tools.GBC;
    3029import org.openstreetmap.josm.tools.ImageProvider;
     30import org.openstreetmap.josm.tools.date.DateUtils;
    3131
    3232public class ConvertToDataLayerAction extends AbstractAction {
  • trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java

    r7021 r7299  
    66import java.awt.Component;
    77import java.awt.GridBagLayout;
     8import java.text.DateFormat;
     9import java.util.Date;
    810
    911import javax.swing.BorderFactory;
     
    3032import org.openstreetmap.josm.gui.widgets.JosmComboBox;
    3133import org.openstreetmap.josm.tools.GBC;
     34import org.openstreetmap.josm.tools.date.DateUtils;
    3235
    3336/**
     
    5659    private JCheckBox modeless = new JCheckBox(tr("Modeless working (Potlatch style)"));
    5760    private JCheckBox dynamicButtons = new JCheckBox(tr("Dynamic buttons in side menus"));
     61    private JCheckBox isoDates = new JCheckBox(tr("Display ISO dates"));
    5862
    5963    @Override
     
    8791            final DefaultListCellRenderer def = new DefaultListCellRenderer();
    8892            @Override
    89             public Component getListCellRendererComponent(JList<? extends LookAndFeelInfo> list, LookAndFeelInfo value, 
     93            public Component getListCellRendererComponent(JList<? extends LookAndFeelInfo> list, LookAndFeelInfo value,
    9094                    int index, boolean isSelected, boolean cellHasFocus) {
    9195                return def.getListCellRendererComponent(list, value.getName(), index, isSelected, cellHasFocus);
     
    122126        panel.add(dynamicButtons, GBC.eop().insets(20, 0, 0, 0));
    123127
     128        Date today = new Date();
     129        isoDates.setToolTipText(tr("Format dates according to {0}. Today''s date will be displayed as {1} instead of {2}",
     130                tr("ISO 8601"),
     131                DateUtils.newIsoDateFormat().format(today),
     132                DateFormat.getDateInstance(DateFormat.SHORT).format(today)));
     133        isoDates.setSelected(DateUtils.PROP_ISO_DATES.get());
     134        panel.add(isoDates, GBC.eop().insets(20, 0, 0, 0));
     135
    124136        panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
    125137
     
    141153        Main.pref.put("modeless", modeless.isSelected());
    142154        Main.pref.put(ToggleDialog.PROP_DYNAMIC_BUTTONS.getKey(), dynamicButtons.isSelected());
     155        Main.pref.put(DateUtils.PROP_ISO_DATES.getKey(), isoDates.isSelected());
    143156        mod |= Main.pref.put("laf", ((LookAndFeelInfo)lafCombo.getSelectedItem()).getClassName());
    144157        return mod;
  • trunk/src/org/openstreetmap/josm/gui/widgets/DateEditorWithSlider.java

    r7005 r7299  
    1010import java.util.Date;
    1111import java.util.List;
     12
    1213import javax.swing.JLabel;
    1314import javax.swing.JPanel;
     
    1718import javax.swing.event.ChangeEvent;
    1819import javax.swing.event.ChangeListener;
     20
    1921import org.openstreetmap.josm.tools.GBC;
    20 
     22import org.openstreetmap.josm.tools.date.DateUtils;
    2123
    2224/**
    23  * Widget originally created for date filtering of GPX tracks. 
     25 * Widget originally created for date filtering of GPX tracks.
    2426 * Allows to enter the date or choose it by using slider
     27 * @since 5815
    2528 */
    2629public class DateEditorWithSlider extends JPanel {
     
    3134    private static final int MAX_SLIDER=300;
    3235    private boolean watchSlider = true;
    33    
     36
    3437    private List<ChangeListener> listeners = new ArrayList<>();
    3538
     39    /**
     40     * Constructs a new {@code DateEditorWithSlider} with a given label
     41     * @param labelText The label to display
     42     */
    3643    public DateEditorWithSlider(String labelText) {
    3744        super(new GridBagLayout());
    3845        spinner = new JSpinner( new SpinnerDateModel() );
    39         String pattern = ((SimpleDateFormat)DateFormat.getDateInstance()).toPattern();
     46        String pattern = ((SimpleDateFormat)DateUtils.getDateFormat(DateFormat.DEFAULT)).toPattern();
    4047        JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(spinner,pattern);
    4148        spinner.setEditor(timeEditor);
    42        
    4349
    4450        spinner.setPreferredSize(new Dimension(spinner.getPreferredSize().width+5,
    4551        spinner.getPreferredSize().height));
    46        
     52
    4753        slider = new JSlider(0,MAX_SLIDER);
    4854        spinner.addChangeListener(new ChangeListener() {
     
    7783        add(slider,GBC.eol().insets(10,0,0,0).fill(GBC.HORIZONTAL));
    7884
    79         dateMin = new Date(0); dateMax =new Date();
     85        dateMin = new Date(0);
     86        dateMax = new Date();
    8087    }
    8188
     
    8491        return new Date((long)(dateMax.getTime()*k+ dateMin.getTime()*(1-k)));
    8592    }
    86    
     93
    8794    protected int intFromDate(Date date) {
    8895        return (int)(300.0*(date.getTime()-dateMin.getTime()) /
     
    102109        return (Date) spinner.getValue();
    103110    }
    104    
     111
    105112    public void addDateListener(ChangeListener l) {
    106113        listeners.add(l);
     
    110117        listeners.remove(l);
    111118    }
    112    
     119
    113120    @Override
    114121    public void setEnabled(boolean enabled) {
    115         super.setEnabled(enabled); 
     122        super.setEnabled(enabled);
    116123        for (Component c: getComponents()) {
    117124            c.setEnabled(enabled);
    118125        }
    119126    }
    120    
    121127}
  • trunk/src/org/openstreetmap/josm/io/AbstractParser.java

    r7012 r7299  
    1414import org.openstreetmap.josm.data.osm.history.HistoryRelation;
    1515import org.openstreetmap.josm.data.osm.history.HistoryWay;
    16 import org.openstreetmap.josm.tools.DateUtils;
     16import org.openstreetmap.josm.tools.date.DateUtils;
    1717import org.xml.sax.Attributes;
    1818import org.xml.sax.Locator;
  • trunk/src/org/openstreetmap/josm/io/ChangesetClosedException.java

    r6890 r7299  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
    6 import java.text.DateFormat;
    76import java.text.ParseException;
    8 import java.text.SimpleDateFormat;
    97import java.util.Date;
    10 import java.util.Locale;
    118import java.util.regex.Matcher;
    129import java.util.regex.Pattern;
    1310
    1411import org.openstreetmap.josm.Main;
     12import org.openstreetmap.josm.tools.date.DateUtils;
    1513
    1614/**
     
    7775        if (m.matches()) {
    7876            changesetId = Long.parseLong(m.group(1));
    79             // Example: "2010-09-07 14:39:41 UTC". Always parsed with US locale regardless
    80             // of the current locale in JOSM
    81             DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.US);
    8277            try {
    83                 closedOn = formatter.parse(m.group(2));
     78                closedOn = DateUtils.newOsmApiDateTimeFormat().parse(m.group(2));
    8479            } catch(ParseException ex) {
    8580                Main.error(tr("Failed to parse date ''{0}'' replied by server.", m.group(2)));
  • trunk/src/org/openstreetmap/josm/io/ChangesetQuery.java

    r7012 r7299  
    99import java.text.MessageFormat;
    1010import java.text.ParseException;
    11 import java.text.SimpleDateFormat;
    1211import java.util.Arrays;
    1312import java.util.Collection;
     
    2423import org.openstreetmap.josm.tools.CheckParameterUtil;
    2524import org.openstreetmap.josm.tools.Utils;
     25import org.openstreetmap.josm.tools.date.DateUtils;
    2626
    2727public class ChangesetQuery {
     
    9797
    9898    /**
    99      * Replies true if this query is restricted to user whom we only know the user name
    100      * for.
    101      *
    102      * @return true if this query is restricted to user whom we only know the user name
    103      * for
     99     * Replies true if this query is restricted to user whom we only know the user name for.
     100     *
     101     * @return true if this query is restricted to user whom we only know the user name for
    104102     */
    105103    public boolean isRestrictedToPartiallyIdentifiedUser() {
     
    206204     * @throws IllegalArgumentException thrown if createdBefore is null
    207205     */
    208     public ChangesetQuery closedAfterAndCreatedBefore(Date closedAfter, Date createdBefore ) throws IllegalArgumentException{
     206    public ChangesetQuery closedAfterAndCreatedBefore(Date closedAfter, Date createdBefore ) throws IllegalArgumentException {
    209207        CheckParameterUtil.ensureParameterNotNull(closedAfter, "closedAfter");
    210208        CheckParameterUtil.ensureParameterNotNull(createdBefore, "createdBefore");
     
    277275                sb.append("&");
    278276            }
    279             SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");
     277            DateFormat df = DateUtils.newIsoDateTimeFormat();
    280278            sb.append("time").append("=").append(df.format(closedAfter));
    281279            sb.append(",").append(df.format(createdBefore));
     
    284282                sb.append("&");
    285283            }
    286             SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");
     284            DateFormat df = DateUtils.newIsoDateTimeFormat();
    287285            sb.append("time").append("=").append(df.format(closedAfter));
    288286        }
     
    315313    public static class ChangesetQueryUrlException extends Exception {
    316314
    317         public ChangesetQueryUrlException() {
    318             super();
    319         }
    320 
    321         public ChangesetQueryUrlException(String arg0, Throwable arg1) {
    322             super(arg0, arg1);
    323         }
    324 
    325         public ChangesetQueryUrlException(String arg0) {
    326             super(arg0);
    327         }
    328 
    329         public ChangesetQueryUrlException(Throwable arg0) {
    330             super(arg0);
     315        /**
     316         * Constructs a new {@code ChangesetQueryUrlException} with the specified detail message.
     317         *
     318         * @param message the detail message. The detail message is saved for later retrieval by the {@link #getMessage()} method.
     319         */
     320        public ChangesetQueryUrlException(String message) {
     321            super(message);
     322        }
     323
     324        /**
     325         * Constructs a new {@code ChangesetQueryUrlException} with the specified cause and a detail message of
     326         * <tt>(cause==null ? null : cause.toString())</tt> (which typically contains the class and detail message of <tt>cause</tt>).
     327         *
     328         * @param  cause the cause (which is saved for later retrieval by the {@link #getCause()} method).
     329         *         (A <tt>null</tt> value is permitted, and indicates that the cause is nonexistent or unknown.)
     330         */
     331        public ChangesetQueryUrlException(Throwable cause) {
     332            super(cause);
    331333        }
    332334    }
     
    335337        protected int parseUid(String value) throws ChangesetQueryUrlException {
    336338            if (value == null || value.trim().isEmpty())
    337                 throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid",value));
     339                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid", value));
    338340            int id;
    339341            try {
    340342                id = Integer.parseInt(value);
    341343                if (id <= 0)
    342                     throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid",value));
     344                    throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid", value));
    343345            } catch(NumberFormatException e) {
    344                 throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid",value));
     346                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid", value));
    345347            }
    346348            return id;
     
    349351        protected boolean parseBoolean(String value, String parameter) throws ChangesetQueryUrlException {
    350352            if (value == null || value.trim().isEmpty())
    351                 throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter,value));
     353                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
    352354            switch (value) {
    353355            case "true":
     
    356358                return false;
    357359            default:
    358                 throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter,value));
     360                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
    359361            }
    360362        }
     
    362364        protected Date parseDate(String value, String parameter) throws ChangesetQueryUrlException {
    363365            if (value == null || value.trim().isEmpty())
    364                 throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter,value));
     366                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
    365367            if (value.endsWith("Z")) {
    366                 // OSM API generates date strings we time zone abbreviation "Z" which Java SimpleDateFormat
     368                // OSM API generates date strings with time zone abbreviation "Z" which Java SimpleDateFormat
    367369                // doesn't understand. Convert into GMT time zone before parsing.
    368370                //
    369371                value = value.substring(0,value.length() - 1) + "GMT+00:00";
    370372            }
    371             DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");
     373            DateFormat formatter = DateUtils.newIsoDateTimeFormat();
    372374            try {
    373375                return formatter.parse(value);
    374376            } catch(ParseException e) {
    375                 throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter,value));
     377                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
    376378            }
    377379        }
     
    384386                return new Date[]{parseDate(dates[0], "time")};
    385387            else if (dates.length == 2)
    386                 return new Date[]{parseDate(dates[0], "time"),parseDate(dates[1], "time")};
     388                return new Date[]{parseDate(dates[0], "time"), parseDate(dates[1], "time")};
    387389            return null;
    388390        }
     
    435437                    try {
    436438                        csQuery.inBbox(new Bounds(entry.getValue(), ","));
    437                     } catch(IllegalArgumentException e) {
     439                    } catch (IllegalArgumentException e) {
    438440                        throw new ChangesetQueryUrlException(e);
    439441                    }
     
    479481         * @throws ChangesetQueryUrlException if the query string doesn't represent a legal query for changesets
    480482         */
    481         public ChangesetQuery parse(String query) throws  ChangesetQueryUrlException{
     483        public ChangesetQuery parse(String query) throws ChangesetQueryUrlException {
    482484            if (query == null)
    483485                return new ChangesetQuery();
     
    485487            if (query.isEmpty())
    486488                return new ChangesetQuery();
    487             Map<String,String> queryParams  = createMapFromQueryString(query);
     489            Map<String,String> queryParams = createMapFromQueryString(query);
    488490            return createFromMap(queryParams);
    489491        }
  • trunk/src/org/openstreetmap/josm/io/NmeaReader.java

    r7082 r7299  
    1818import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
    1919import org.openstreetmap.josm.data.gpx.WayPoint;
    20 import org.openstreetmap.josm.tools.DateUtils;
     20import org.openstreetmap.josm.tools.date.DateUtils;
    2121
    2222/**
  • trunk/src/org/openstreetmap/josm/io/OsmChangesetParser.java

    r7082 r7299  
    1818import org.openstreetmap.josm.data.osm.User;
    1919import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    20 import org.openstreetmap.josm.tools.DateUtils;
    2120import org.openstreetmap.josm.tools.XmlParsingException;
     21import org.openstreetmap.josm.tools.date.DateUtils;
    2222import org.xml.sax.Attributes;
    2323import org.xml.sax.InputSource;
  • trunk/src/org/openstreetmap/josm/io/OsmReader.java

    r7081 r7299  
    3939import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    4040import org.openstreetmap.josm.tools.CheckParameterUtil;
    41 import org.openstreetmap.josm.tools.DateUtils;
     41import org.openstreetmap.josm.tools.date.DateUtils;
    4242
    4343/**
  • trunk/src/org/openstreetmap/josm/io/OsmServerUserInfoReader.java

    r7033 r7299  
    1818import org.openstreetmap.josm.data.osm.UserInfo;
    1919import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    20 import org.openstreetmap.josm.tools.DateUtils;
    2120import org.openstreetmap.josm.tools.XmlParsingException;
     21import org.openstreetmap.josm.tools.date.DateUtils;
    2222import org.w3c.dom.Document;
    2323import org.w3c.dom.Node;
  • trunk/src/org/openstreetmap/josm/io/OsmWriter.java

    r7236 r7299  
    2828import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
    2929import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    30 import org.openstreetmap.josm.tools.DateUtils;
     30import org.openstreetmap.josm.tools.date.DateUtils;
    3131
    3232/**
  • trunk/src/org/openstreetmap/josm/tools/ExceptionUtil.java

    r7205 r7299  
    1313import java.text.DateFormat;
    1414import java.text.ParseException;
    15 import java.text.SimpleDateFormat;
    1615import java.util.Collection;
    1716import java.util.Date;
    18 import java.util.Locale;
    1917import java.util.TreeSet;
    2018import java.util.regex.Matcher;
     
    3533import org.openstreetmap.josm.io.OsmTransferException;
    3634import org.openstreetmap.josm.io.auth.CredentialsManager;
     35import org.openstreetmap.josm.tools.date.DateUtils;
    3736
    3837@SuppressWarnings("CallToThreadDumpStack")
     
    362361            if (m.matches()) {
    363362                long changesetId = Long.parseLong(m.group(1));
    364                 // Example: "2010-09-07 14:39:41 UTC". Always parsed with US locale, regardless
    365                 // of the current locale in JOSM
    366                 DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.US);
    367363                Date closeDate = null;
    368364                try {
    369                     closeDate = formatter.parse(m.group(2));
     365                    closeDate = DateUtils.newOsmApiDateTimeFormat().parse(m.group(2));
    370366                } catch (ParseException ex) {
    371367                    Main.error(tr("Failed to parse date ''{0}'' replied by server.", m.group(2)));
     
    378374                    );
    379375                } else {
    380                     SimpleDateFormat dateFormat = new SimpleDateFormat();
    381376                    msg = tr(
    382377                            "<html>Closing of changeset <strong>{0}</strong> failed<br>"
    383378                            +" because it has already been closed on {1}.",
    384379                            changesetId,
    385                             dateFormat.format(closeDate)
     380                            DateUtils.formatDateTime(closeDate, DateFormat.DEFAULT, DateFormat.DEFAULT)
    386381                    );
    387382                }
     
    408403     */
    409404    public static String explainChangesetClosedException(ChangesetClosedException e) {
    410         SimpleDateFormat dateFormat = new SimpleDateFormat();
    411405        Main.error(e);
    412406        return tr(
     
    414408                +"because it has already been closed on {1}.",
    415409                e.getChangesetId(),
    416                 e.getClosedOn() == null ? "?" : dateFormat.format(e.getClosedOn())
     410                e.getClosedOn() == null ? "?" : DateUtils.formatDateTime(e.getClosedOn(), DateFormat.DEFAULT, DateFormat.DEFAULT)
    417411        );
    418412    }
  • trunk/src/org/openstreetmap/josm/tools/ExifReader.java

    r7004 r7299  
    99import org.openstreetmap.josm.Main;
    1010import org.openstreetmap.josm.data.coor.LatLon;
     11import org.openstreetmap.josm.tools.date.PrimaryDateParser;
    1112
    1213import com.drew.imaging.jpeg.JpegMetadataReader;
     
    5758            if (dateStr != null) {
    5859                dateStr = dateStr.replace('/', ':'); // workaround for HTC Sensation bug, see #7228
    59                 return DateParser.parse(dateStr);
     60                return new PrimaryDateParser().parse(dateStr);
    6061            }
    6162        } catch (ParseException e) {
  • trunk/src/org/openstreetmap/josm/tools/date/DateUtils.java

    r7293 r7299  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.tools;
    3 
     2package org.openstreetmap.josm.tools.date;
     3
     4import java.text.DateFormat;
    45import java.text.ParsePosition;
    56import java.text.SimpleDateFormat;
     
    78import java.util.Date;
    89import java.util.GregorianCalendar;
     10import java.util.Locale;
    911import java.util.TimeZone;
    1012
     
    1416
    1517import org.openstreetmap.josm.Main;
     18import org.openstreetmap.josm.data.preferences.BooleanProperty;
     19import org.openstreetmap.josm.tools.CheckParameterUtil;
    1620
    1721/**
    18  * A static utility class dealing with parsing XML date quickly and formatting
    19  * a date to the XML UTC format regardless of current locale.
    20  *
     22 * A static utility class dealing with:
     23 * <ul>
     24 * <li>parsing XML date quickly and formatting a date to the XML UTC format regardless of current locale</li>
     25 * <li>providing a single entry point for formatting dates to be displayed in JOSM GUI, based on user preferences</li>
     26 * </ul>
    2127 * @author nenik
    2228 */
    2329public final class DateUtils {
    24     private DateUtils() {}
     30
     31    private DateUtils() {
     32        // Hide default constructor for utils classes
     33    }
     34
     35    /**
     36     * Property to enable display of ISO dates globally.
     37     * @since 7299
     38     */
     39    public static final BooleanProperty PROP_ISO_DATES = new BooleanProperty("iso.dates", false);
     40
    2541    /**
    2642     * A shared instance used for conversion between individual date fields
     
    4460    }
    4561
     62    /**
     63     * Parses XML date quickly, regardless of current locale.
     64     * @param str The XML date as string
     65     * @return The date
     66     */
    4667    public static synchronized Date fromString(String str) {
    4768        // "2007-07-25T09:26:24{Z|{+|-}01:00}"
     
    6586
    6687            return calendar.getTime();
    67         }
    68         else if(checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxxZ") ||
     88        } else if(checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxxZ") ||
    6989                checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx") ||
    7090                checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx+xx:00") ||
     
    83103
    84104            return calendar.getTime();
    85         }
    86         else
    87         {
     105        } else {
    88106            // example date format "18-AUG-08 13:33:03"
    89107            SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yy HH:mm:ss");
     
    100118    }
    101119
     120    /**
     121     * Formats a date to the XML UTC format regardless of current locale.
     122     * @param date The date to format
     123     * @return The formatted date
     124     */
    102125    public static synchronized String fromDate(Date date) {
    103126        calendar.setTime(date);
     
    122145    }
    123146
     147    /**
     148     * Returns a new {@code SimpleDateFormat} for date only, according to <a href="https://en.wikipedia.org/wiki/ISO_8601">ISO 8601</a>.
     149     * @return a new ISO 8601 date format, for date only.
     150     * @since 7299
     151     */
     152    public static final SimpleDateFormat newIsoDateFormat() {
     153        return new SimpleDateFormat("yyyy-MM-dd");
     154    }
     155
     156    /**
     157     * Returns a new {@code SimpleDateFormat} for date and time, according to <a href="https://en.wikipedia.org/wiki/ISO_8601">ISO 8601</a>.
     158     * @return a new ISO 8601 date format, for date and time.
     159     * @since 7299
     160     */
     161    public static final SimpleDateFormat newIsoDateTimeFormat() {
     162        return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
     163    }
     164
     165    /**
     166     * Returns a new {@code SimpleDateFormat} for date and time, according to format used in OSM API errors.
     167     * @return a new date format, for date and time, to use for OSM API error handling.
     168     * @since 7299
     169     */
     170    public static final SimpleDateFormat newOsmApiDateTimeFormat() {
     171        // Example: "2010-09-07 14:39:41 UTC".
     172        // Always parsed with US locale regardless of the current locale in JOSM
     173        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.US);
     174    }
     175
     176    /**
     177     * Returns the date format to be used for current user, based on user preferences.
     178     * @param dateStyle The date style as described in {@link DateFormat#getDateInstance}. Ignored if "ISO dates" option is set
     179     * @return The date format
     180     * @since 7299
     181     */
     182    public static final DateFormat getDateFormat(int dateStyle) {
     183        if (PROP_ISO_DATES.get()) {
     184            return newIsoDateFormat();
     185        } else {
     186            return DateFormat.getDateInstance(dateStyle, Locale.getDefault());
     187        }
     188    }
     189
     190    /**
     191     * Formats a date to be displayed to current user, based on user preferences.
     192     * @param date The date to display. Must not be {@code null}
     193     * @param dateStyle The date style as described in {@link DateFormat#getDateInstance}. Ignored if "ISO dates" option is set
     194     * @return The formatted date
     195     * @since 7299
     196     */
     197    public static final String formatDate(Date date, int dateStyle) {
     198        CheckParameterUtil.ensureParameterNotNull(date, "date");
     199        return getDateFormat(dateStyle).format(date);
     200    }
     201
     202    /**
     203     * Returns the time format to be used for current user, based on user preferences.
     204     * @param timeStyle The time style as described in {@link DateFormat#getTimeInstance}. Ignored if "ISO dates" option is set
     205     * @return The time format
     206     * @since 7299
     207     */
     208    public static final DateFormat getTimeFormat(int timeStyle) {
     209        if (PROP_ISO_DATES.get()) {
     210            // This is not strictly conform to ISO 8601. We just want to avoid US-style times such as 3.30pm
     211            return new SimpleDateFormat("HH:mm:ss");
     212        } else {
     213            return DateFormat.getTimeInstance(timeStyle, Locale.getDefault());
     214        }
     215    }
     216    /**
     217     * Formats a time to be displayed to current user, based on user preferences.
     218     * @param time The time to display. Must not be {@code null}
     219     * @param timeStyle The time style as described in {@link DateFormat#getTimeInstance}. Ignored if "ISO dates" option is set
     220     * @return The formatted time
     221     * @since 7299
     222     */
     223    public static final String formatTime(Date time, int timeStyle) {
     224        CheckParameterUtil.ensureParameterNotNull(time, "time");
     225        return getTimeFormat(timeStyle).format(time);
     226    }
     227
     228    /**
     229     * Returns the date/time format to be used for current user, based on user preferences.
     230     * @param dateStyle The date style as described in {@link DateFormat#getDateTimeInstance}. Ignored if "ISO dates" option is set
     231     * @param timeStyle The time style as described in {@code DateFormat.getDateTimeInstance}. Ignored if "ISO dates" option is set
     232     * @return The date/time format
     233     * @since 7299
     234     */
     235    public static final DateFormat getDateTimeFormat(int dateStyle, int timeStyle) {
     236        if (PROP_ISO_DATES.get()) {
     237            // This is not strictly conform to ISO 8601. We just want to avoid US-style times such as 3.30pm
     238            // and we don't want to use the 'T' separator as a space character is much more readable
     239            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     240        } else {
     241            return DateFormat.getDateTimeInstance(dateStyle, timeStyle, Locale.getDefault());
     242        }
     243    }
     244
     245    /**
     246     * Formats a date/time to be displayed to current user, based on user preferences.
     247     * @param datetime The date/time to display. Must not be {@code null}
     248     * @param dateStyle The date style as described in {@link DateFormat#getDateTimeInstance}. Ignored if "ISO dates" option is set
     249     * @param timeStyle The time style as described in {@code DateFormat.getDateTimeInstance}. Ignored if "ISO dates" option is set
     250     * @return The formatted date/time
     251     * @since 7299
     252     */
     253    public static final String formatDateTime(Date datetime, int dateStyle, int timeStyle) {
     254        CheckParameterUtil.ensureParameterNotNull(datetime, "datetime");
     255        return getDateTimeFormat(dateStyle, timeStyle).format(datetime);
     256    }
    124257}
  • trunk/src/org/openstreetmap/josm/tools/date/FallbackDateParser.java

    r7293 r7299  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.tools;
     2package org.openstreetmap.josm.tools.date;
    33
    44import java.text.DateFormat;
     
    1616 * @author Brett Henderson
    1717 */
    18 public class FallbackDateParser {
     18class FallbackDateParser {
    1919
    2020    private static final String[] formats = {
  • trunk/src/org/openstreetmap/josm/tools/date/PrimaryDateParser.java

    r7293 r7299  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.tools;
     2package org.openstreetmap.josm.tools.date;
    33
    44import java.text.ParseException;
Note: See TracChangeset for help on using the changeset viewer.