在测试我的应用程序时,我遇到了一个奇怪的问题 当我在1945年之前输入一个日期时,它会改变时区.
我有这个简单的程序来显示问题.
public static void main(String[] args) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
Calendar calendar = Calendar.getInstance();
System.out.println("**********Before 1945");
calendar.set(1943, Calendar.APRIL, 12, 5, 34, 12);
System.out.println(format.format(calendar.getTime()));
System.out.println(calendar.getTime());
System.out.println("**********After 1945");
calendar.set(1946, Calendar.APRIL, 12, 5, 34, 12);
System.out.println(format.format(calendar.getTime()));
System.out.println(calendar.getTime());
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出如下: -
**********Before 1945
1943-04-12 05:34:12+0630
Mon Apr 12 05:34:12 IDT 1943
**********After 1945
1946-04-12 05:34:12+0530
Fri Apr 12 05:34:12 IST 1946
Run Code Online (Sandbox Code Playgroud)
对于第一个,我得到它+0630和IDT,而第二个,我正在+0530和IST预计.
在看了@Elliott Frisch之后,我在1942年之前尝试了一个日期: -
calendar.set(1915, Calendar.APRIL, 12, 5, 34, …Run Code Online (Sandbox Code Playgroud) 我想要一些字符串的UNIX纪元时间(Posix Time,Unix Time)pattern,字符串是正常格式(所以UTC).请使用Java 8,而不是Joda或旧Java.
到目前为止,我有以下内容,但我讨厌这个原因有很多:
"UTC"ZoneOffset.ofHours(0)我到目前为止最好的:
def dateTimeStringToEpoch(s: String, pattern: String): Long =
LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
.atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0)))
.toInstant().getEpochSeconds
Run Code Online (Sandbox Code Playgroud)
另外,奖金问题,是否有效?创建过DateTimeFormatter孔是否有任何开销DateTimeFormatter.ofPattern(pattern)?如果是这样的话?
有没有办法在Java中将给定的DateString转换为Milliseconds(Epoch长格式)?示例:我想转换
public static final String date = "04/28/2016";
Run Code Online (Sandbox Code Playgroud)
到毫秒(epoch).
我对 Java 和一般编码非常陌生 - 我有一些代码以以下格式返回时间戳,如下yyyy.MM.dd HH:mm:ss:ms所示:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss:sss");
Run Code Online (Sandbox Code Playgroud)
这将返回:
2017.07.19 11:42:30:423
Run Code Online (Sandbox Code Playgroud)
有没有办法编辑上面的“SimpleDateFormat 格式化程序”代码以将日期/时间作为包含毫秒的纪元时间戳返回,以便返回的值按照以下格式进行格式化?
1500464550423
Run Code Online (Sandbox Code Playgroud)
我希望我可以修改代码的("yyyy.MM.dd HH:mm:ss:sss")一部分SimpleDateFormat formatter来做到这一点。
非常感谢任何帮助或建议。
谢谢
我有问题SimpleDateFormat。
SimpleDateFormat dtfmt=new SimpleDateFormat("dd MMM yyyy hh:mm a", Locale.getDefault());
Date dt=dtfmt.parse(deptdt);
Run Code Online (Sandbox Code Playgroud)
在 Android 模拟器中工作正常,但在手机中出现此错误:
W/System.err: java.text.ParseException: Unparseable date: "24 Oct 2016 7:31 pm" (at offset 3) W/System.err: at java.text.DateFormat.parse(DateFormat.java:579)
有什么解决办法吗?
编辑:我已经编辑了我的问题以包含更多信息,我已经尝试了很多方法来做到这一点,在StackOverflow上问一个问题通常是我的最后一招.任何帮助是极大的赞赏.
我有一个YYYYMMDDHHMMSS格式的日期(它是一个Timestamp对象)(例如20140430193247).这是从我的服务发送到前端,使用AngularJS格式显示它:date:'dd/MM/yyyy'.
如何将其转换为Epoch/Unix时间?
我已经尝试了与此相关的重复问题,我得到的是另一个日期.
我也尝试过以下方法:
A:
//_time == 20140430193247
return _time.getTime()/1000; // returns 20140430193 - INCORRECT
Run Code Online (Sandbox Code Playgroud)
B:
return _time.getTime(); // returns 20140430193247 (Frontend: 23/03/2608) - INCORRECT
Run Code Online (Sandbox Code Playgroud)
C:
Date date = new Date();
//_time = 20140501143245 (i.e. 05/01/2014 14:32:45)
String str = _time.toString();
System.out.println("Time string is " + str);
//Prints: Time string is 2608-03-24 15:39:03.245 meaning _time.toString() cannot be used
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
try {
date = df.parse(str);
} catch (ParseException e) {
}
return date; // returns …Run Code Online (Sandbox Code Playgroud)