我正在努力从Active Directory中获取日期值(createWhen),并将其转换为Java日期,以获取在两个日期之间创建的帐户列表.一切都工作正常,除了一种方法:从AD日期到Java日期的方法.该方法如下所示:
private Date getParsedDate(String givenString) {
System.out.println("Value from AD is: " + givenString);
Date parsedDate = null;
String formattedString = this.formatDateString(givenString);
System.out.println("Formatted String is: " + formattedString);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/DD");
try {
parsedDate = sdf.parse(formattedString);
System.out.println("Final date string is: " + parsedDate.toString());
} catch (ParseException ex) {
ex.printStackTrace();
}
return parsedDate;
}
Run Code Online (Sandbox Code Playgroud)
并且,对于来自AD的单个任意数据:
Value from AD is: 20050912190509.0Z
Formatted String is: 2005/09/12
Final date string is: Wed Jan 12 00:00:00 EST 2005
显然,它正确地提取了日期和年份(如果我选择包括小时/分钟/秒,它也包括正确的那些),但是由于某种原因,每个日期都在1月份.
现在,我确定我的错误是一个非常简单的错误,但我已经重新检查了我的格式十次,而我正处于我再也看不到它的地步.第二双眼睛是否可以查看我的代码并指出我错误的地方让这个月变得非常不正确?
谢谢.
我有一个00:01:30.500相当于90500毫秒的字符串.我尝试过使用SimpleDateFormat包含当前日期的毫秒数.我只需要字符串表示毫秒.我是否必须编写自定义方法,它将分割并计算毫秒数?或者还有其他办法吗?谢谢.
我试过如下:
String startAfter = "00:01:30.555";
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS");
Date date = dateFormat.parse(startAfter);
System.out.println(date.getTime());
Run Code Online (Sandbox Code Playgroud) 这开始作为一个简单的错误:我有YYYY,而不是yyyy在我的格式字符串的SimpleDateFormat对象.但是我对使用不正确格式字符串的测试结果感到困惑.
这段代码:
@Test
public void whatTheHell() {
try {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");
Date d1 = sdf.parse("01/07/2016");
Date d2 = sdf.parse("02/08/2016");
Date d3 = sdf.parse("11/29/2027");
System.out.println(d1.toString());
System.out.println(d2.toString());
System.out.println(d3.toString());
} catch (ParseException pe) {
fail("ParseException: " + pe.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2026
Run Code Online (Sandbox Code Playgroud)
我在这里阅读了关于'Y'参数的文档:https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html,但我仍然看不到它的逻辑在这里工作.特别是最后一个例子:我可以有点理解1月(也可能是2月)的日期如何转化为上一年的12月,但将11月29日的日期向后移动11个月让我感到困惑.12月27日有什么特别之处?
谁能解释一下?
更多信息
@Jan建议依赖toString()方法可能是个问题,所以我定义了一个日期格式,以YYYY MM dd '-' yyyy MM dd …
SimpleDateFormat monthFormat = new SimpleDateFormat("MMMM");
SimpleDateFormat fullFormat = new SimpleDateFormat("EE MMM dd, HH:mm:ss")
Run Code Online (Sandbox Code Playgroud)
我有几个这样的代码经常被调用,将它们声明为static变量是否有意义?
format()在这种情况下,将动态参数传递给方法是否安全?
我试图将一个字符串解析为一个对象的构造函数中的日期,我们将调用它Example.这是代码
private static final SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
private long time;
public Example(String date) {
try {
this.time = sdf.parse(date).getTime();
} catch (Exception e) {
logger.log(Level.WARNING, "Exception while parsing date " + date, e);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我在Tomcat实例中创建这些对象(无论是否有所不同).
我得到以下类型的例外
Fri Jul 06 15:13:48 EDT 2012 WARNING: Exception while parsing date 2012-07-06 18:57:31
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Long.parseLong(Long.java:431)
at java.lang.Long.parseLong(Long.java:468)
at java.text.DigitList.getLong(DigitList.java:177)
at java.text.DecimalFormat.parse(DecimalFormat.java:1297)
at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1589)
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1311)
at java.text.DateFormat.parse(DateFormat.java:335)
at ...
Fri …Run Code Online (Sandbox Code Playgroud) 下面的代码给出了解析日期为"Wed Jan 13 00:00:00 EST 2010"而不是"Wed Jun 13 00:00:00 EST 2010".任何想法都非常感激.
SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd'T'HH:mm:ss");
String str = "2010-06-13T00:00:00";
Date date = sf.parse(str);
System.out.println(" Date " + date.toString());
Run Code Online (Sandbox Code Playgroud) 如何将我的日期格式化为2012-11-25T23:50:56.193+01:00使用SimpleDateFormat?
如果我使用Z的格式如
yyyy-MM-dd'T'hh:mm:ss.SSSZ
然后它显示
2013-03-06T11:49:05.490+0100
当我使用"HH"标志时android.text.format.DateFormat,它被解释为文字"HH".但是当我使用java.text.SimpleDateFormat它时,它被解释为2位数小时.他们为什么不同?
我不是在找工作替代品(我已经知道我必须使用kk而不是HH).我只是好奇为什么"HH"不被认可.
Java示例:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Calendar calendar = Calendar.getInstance();
String dateJava = new java.text.SimpleDateFormat(
"dd-MM-yyyy HH:mm:ss").format(calendar.getTime());
String dateAndroid = android.text.format.DateFormat.format(
"dd-MM-yyyy HH:mm:ss", calendar).toString();
TextView tvAndroid = (TextView) findViewById(R.id.tvAndroid);
TextView tvJava = (TextView) findViewById(R.id.tvJava);
tvAndroid.setText("Android: " + dateAndroid); //prints 26-05-2013 HH:36:34
tvJava.setText("Java: " + dateJava); //prints 26-05-2013 22:36:34
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Android: 26-05-2013 HH:36:34
Java: 26-05-2013 22:36:34
Run Code Online (Sandbox Code Playgroud)
我希望两者都是 26-05-2013 22:36:34
Android的DateFormat有错误吗?
Java的SimpleDateFormat接受这些:
H Hour in day (0-23) Number …Run Code Online (Sandbox Code Playgroud) 我已经写了一个方法来获取当前日期的格式,yyyy-MM-dd并希望能够创建另一种方法来获取昨天的日期,即当前日期的前一天.所有这些需求是日期而不是时间戳.我也不想使用Calendar它.我这样设置了当前日期:
public class DateWithNoTimestamp
{
private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";
public final static String getCurrentDate()
{
DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
Date date = new Date();
return dateFormat.format(date);
}
}
Run Code Online (Sandbox Code Playgroud)
这可以获得当前日期,现在是getYesertdayDate()我遇到麻烦的单独方法.如何getCurrentDate()在减去一天的同时以与我相同的方式进行设置?
我检查了SimpleDateFormatjavadoc,但是我无法找到一种方法来解析日期格式的序数指示符,如下所示:
Feb 13th 2015 9:00AM
Run Code Online (Sandbox Code Playgroud)
我试过了"MMM dd yyyy hh:mma",但是这个日子必须要有数字才能正确吗?
是否可以使用a解析"第13"日期SimpleDateFormat而不必截断字符串?
java ×10
simpledateformat ×10
date-format ×2
android ×1
date ×1
date-parsing ×1
time ×1
timestamp ×1
tomcat ×1