标签: simpledateformat

如何在我的日期添加分钟

我有这个日期对象:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
Run Code Online (Sandbox Code Playgroud)

d1的值是 Fri Jan 07 17:40:00 PKT 2011

现在我想在上面的日期添加10分钟.

Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
Run Code Online (Sandbox Code Playgroud)

newTime改变的价值2011-50-07 17:50 但应该是07-01-2011 17:50.

它正确添加分钟但它也会改变月份,不知道为什么!

java calendar date simpledateformat java.util.date

99
推荐指数
6
解决办法
20万
查看次数

同步对SimpleDateFormat的访问

SimpleDateFormat的javadoc声明SimpleDateFormat未同步.

"日期格式不同步.建议为每个线程创建单独的格式实例.如果多个线程同时访问格式,则必须在外部同步."

但是在多线程环境中使用SimpleDateFormat实例的最佳方法是什么.以下是我想到的一些选项,我过去使用过选项1和2,但我很想知道是否有更好的替代方案或哪些选项可以提供最佳性能和并发性.

选项1:在需要时创建本地实例

public String formatDate(Date d) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    return sdf.format(d);
}
Run Code Online (Sandbox Code Playgroud)

选项2:将SimpleDateFormat的实例创建为类变量,但同步对其的访问.

private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public String formatDate(Date d) {
    synchronized(sdf) {
        return sdf.format(d);
    }
}
Run Code Online (Sandbox Code Playgroud)

选项3:创建ThreadLocal以为每个线程存储SimpleDateFormat的不同实例.

private ThreadLocal<SimpleDateFormat> tl = new ThreadLocal<SimpleDateFormat>();
public String formatDate(Date d) {
    SimpleDateFormat sdf = tl.get();
    if(sdf == null) {
        sdf = new SimpleDateFormat("yyyy-MM-hh");
        tl.set(sdf);
    }
    return sdf.format(d);
}
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading simpledateformat

86
推荐指数
5
解决办法
2万
查看次数

Y返回2012,而y在SimpleDateFormat中返回2011

我想知道为什么'Y'会回归2012而'y'会在2011年回归SimpleDateFormat:

System.out.println(new SimpleDateFormat("Y").format(new Date())); // prints 2012
System.out.println(new SimpleDateFormat("y").format(new Date())); // prints 2011
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释原因吗?

java date simpledateformat

75
推荐指数
3
解决办法
2万
查看次数

SimpleDateFormat和基于语言环境的格式字符串

我正在尝试基于给定的语言环境以不同的方式在Java中格式化日期.例如,我希望英语用户看到"2009年11月1日"(由"MMM d,yyyy"格式化)和挪威用户看到"1. nov.2009"("d.MMM.yyyy").

如果我将语言环境添加到SimpleDateFormat构造函数中,那么月份部分可以正常工作,但其余部分呢?

我希望我可以将与locales配对的格式字符串添加到SimpleDateFormat,但我找不到任何方法来执行此操作.是否可以或者我是否需要让我的代码检查语言环境并添加相应的格式字符串?

java locale date simpledateformat

74
推荐指数
6
解决办法
19万
查看次数

simpledateformat使用'Z'文字解析日期

我试图解析一个看起来像这样的日期:

yyyy-MM-dd'T'HH:mm:ss
Run Code Online (Sandbox Code Playgroud)

这是http://www.ietf.org/rfc/rfc3339.txt的有效日期."Z"字面意思"暗示UTC是指定时间内的首选参考点."

如果我尝试使用SimpleDateFormat和此模式解析它:

yyyy-MM-dd'T'HH:mm:ssz
yyyy-MM-dd'T'HH:mm:ssZ
Run Code Online (Sandbox Code Playgroud)

它将被解析为2010年4月5日17:16:00美国东部时间2010年

SimpleDateFormat无法使用以下模式解析字符串:

yyyy-MM-dd'T'HH:mm:ss
Run Code Online (Sandbox Code Playgroud)

我可以显式设置TimeZone在SimpleDateFormat上使用以获得预期的输出,但我不认为这是必要的.有什么我想念的吗?有替代日期解析器吗?

java timezone datetime parsing simpledateformat

73
推荐指数
7
解决办法
12万
查看次数

如何将Instant转换为日期格式?

我可以通过这种方式将a转换java.util.Datejava.time.Instant(Java 8及更高版本):

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 8);
cal.set(Calendar.MINUTE, 30);
Date startTime = cal.getTime();
Instant i = startTime.toInstant();
Run Code Online (Sandbox Code Playgroud)

有人能告诉我有关特定日期和时间格式的即时转换吗?即2015-06-02 8:30:00

我已经通过api但找不到满意的答案.

java datetime date simpledateformat java-8

73
推荐指数
2
解决办法
11万
查看次数

在SimpleDateFormat模式字符串中使用字母字符

是否可以在SimpleDateFormat模式字符串中包含字母字符?

我正在尝试创建一个格式字符串,其中字母"T"包含在时间之前,例如:

2003-11-15 T 09:30:47-05:00

我目前正在使用yyyy-MM-ddhh:mm:ssZ模式字符串.

如果我将其更改为yyyy-MM-ddThh:mm:ssZ它将抛出一个例外,'A'为'Z','a'为'z'保留.

是否有任何解决方案不涉及使用两个DateFormats?

java formatting datetime simpledateformat

72
推荐指数
1
解决办法
3万
查看次数

SimpleDateFormat类中可用的日期格式是什么?

任何人都可以告诉我SimpleDateFormat类中可用的日期格式.

我已经通过api但找不到满意的答案.非常感谢任何帮助.

java date simpledateformat

71
推荐指数
4
解决办法
24万
查看次数

如何在日历中使用SimpleDateFormat?

我有GregorianCalendar实例,需要使用SimpleDateFormat(或者可以用于日历,但提供所需的#fromat()功能)以获得所需的输出.请建议解决方案和永久解决方案一样好.

java formatting calendar date simpledateformat

67
推荐指数
2
解决办法
8万
查看次数

在日期格式化后以小写字母显示AM和PM

格式化日期后我显示时间显示上午或下午(大写)我希望它在小写像上午,下午这是我的代码

public class Timeis {
    public static void main(String s[]) {
        long ts = 1022895271767L;
        String st = null;  
        st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(ts);
        System.out.println("time is " + ts);  
    }
}
Run Code Online (Sandbox Code Playgroud)

java datetime simpledateformat

62
推荐指数
5
解决办法
4万
查看次数