I am receiving a Find Bugs error - call to method of static java.text.DateFormat and I don't know the reason why it's not good / advisable to be doing these things below.
private static final Date TODAY = Calendar.getInstance().getTime();
private static final DateFormat yymmdd = new SimpleDateFormat("yyMMdd");
private String fileName = "file_" + yymmdd.format(TODAY);
I'm not sure if FindBugs is complaining about this, but one problem I see with your code is that you're defining
TODAY
as a class level (static), constant (final) variable. This communicates the intent that you wantTODAY
to never change (I don't believe this is the case, since java.util.Dates are mutable, but that's another story).Think about what happens if you application runs for multiple days?
TODAY
(unless you update it) will be referencing the day the application was started, not the current date. Are you sure this is what you meant?This may not be a bug in your code at all, but the intent is not clear, and I believe that may be what FindBugs is complaining about.
An alternative that not has been mentioned is using ThreadLocal. See http://www.javacodegeeks.com/2010/07/java-best-practices-dateformat-in.html for more info + performance comparison between the 3 options:
Example of using ThreadLocal:
Usage:
It's not thread-safe, for one thing.
You can get this to go away by wrapping all the references to the DateFormat in a synchronize block - just make sure all calls are wrapped in the same synchronize object!
I assume this is because format is not thread-safe?
(I have not seen what findbugs complain about, can you provide the warning text?)
Are you sure it's not
? That's what the error message indicates.
I think what it aims at is the fact that
DateFormat
is not thread safe, so having an instance as a static field indicates potential race conditions.