我要求将传入日期字符串格式"20130212"(YYYYMMDD)转换为12/02/2013(DD/MM/YYYY)
使用ThreadLocal.我知道一种方法可以做到这一点,没有ThreadLocal.谁能帮我?
转换没有ThreadLocal:
final SimpleDateFormat format2 = new SimpleDateFormat("MM/dd/yyyy");
final SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMdd");
final Date date = format1.parse(tradeDate);
final Date formattedDate = format2.parse(format2.format(date));
Run Code Online (Sandbox Code Playgroud) 我运行下面的java代码来获得时差.
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class Test
{
public static SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
public static Date date1,date2;
public static long diff;
public static String TAG ="DateConversion";
public static Calendar cal1,cal2;
public static void main(String a[])
{
checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 11:15:00");
checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 12:15:00");
checkTimeDifference("2013-10-30 10:15:00", "2013-10-30 13:15:00");
}
public static void checkTimeDifference(String strDate,String checkDate)
{
try
{
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
date1 = simpleDateFormat.parse(strDate);
date2 = simpleDateFormat.parse(checkDate);
//in milliseconds
diff = date2.getTime() - date1.getTime();
System.out.println("Difference …Run Code Online (Sandbox Code Playgroud) 我们考虑以下代码:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
long start = sdf.parse("10:30:00 30/09/2009").getTime();
long end = sdf.parse("10:30:00 30/10/2009").getTime();
Calendar c = Calendar.getInstance(Locale.US);
c.setTimeInMillis(start);
System.out.println("Start = " + c.getTime());
c.setTimeInMillis(end);
System.out.println(" End = " + c.getTime());
Run Code Online (Sandbox Code Playgroud)
运行此代码段时,我有以下输出:
Start = Wed Sep 30 10:30:00 CEST 2009
End = Fri Oct 30 10:30:00 CET 2009
Run Code Online (Sandbox Code Playgroud)
为什么我会得到不同的时区?
请注意,如果我在8月设置第一个日期而在9月设置第二个日期,则输出将在两种情况下显示相同的时区:
long start = sdf.parse("10:30:00 30/08/2009").getTime();
long end = sdf.parse("10:30:00 30/09/2009").getTime();
Run Code Online (Sandbox Code Playgroud)
将显示:
Start = Sun Aug 30 10:30:00 CEST 2009
End = Wed Sep 30 10:30:00 CEST …Run Code Online (Sandbox Code Playgroud) 我需要使用日期模式"yyyy-MM-dd"从输入字符串解析日期,如果日期将以任何其他格式出现,则抛出错误.
这是我解析日期的代码段:
private void validateDate() throws MyException {
Date parsedDate;
String DATE_FORMAT = "yyyy-MM-dd";
try{
parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate());
System.out.println(parsedDate);
} catch (ParseException e) {
throw new MyException(“Error occurred while processing date:” + getMyDate());
}
}
Run Code Online (Sandbox Code Playgroud)
当我在myDate中输入像"2011-06-12"这样的字符串时,我会得到输出"Thu Sep 29 00:00:00 EEST 2011",这很好.
当我发送一个不正确的字符串,如"2011-0612"时,我收到错误的预期.
当我试图传递一个仍然有两个"连字符"但字符数错误的字符串时,问题就开始了.例:
输入字符串"2011-06-1211"结果"Tue Sep 23 00:00:00 EEST 2014".
输入字符串"2011-1106-12"结果"Mon Feb 12 00:00:00 EET 2103".
我无法更改字符串日期的输入格式.
我怎么能避免呢?
我知道有关于此的几个问题.但是我遇到了特定日期模式的问题.这是一个例子:
20130401100000[-03:EST]
Run Code Online (Sandbox Code Playgroud)
我跟你说话是-03因为根据SimpleDateFormat文件它应该有4位数.我得到的最接近的模式是:
yyyyMMddHHmmss'['Z':'z']'
Run Code Online (Sandbox Code Playgroud)
但由于2位数它只是不起作用.这是我用于测试的代码示例:
public static void main(String[] args) throws ParseException {
String input = "20130401100000[-03:EST]";
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'");
df.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(df.format(new Date()));
System.out.println(df.parse(input));
}
Run Code Online (Sandbox Code Playgroud)
当我打印new Date()我得到这个:
20130528155734[+0000:GMT]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试解析时,input我得到以下异常:
Exception in thread "main" java.text.ParseException: Unparseable date: "20130401100000[-03:EST]"
at java.text.DateFormat.parse(DateFormat.java:337)
at Teste.main(Teste.java:17)
Run Code Online (Sandbox Code Playgroud)
我正在开发和Android应用程序,我需要计算两次之间的差异.我需要计算24小时的时差,以及两天的时间差(例如今天下午5点到明天上午9点).
我尝试了以下代码,计算仅适用于24小时的差异,
String dateStart = "08:00:00";
String dateStop = "13:00:00";
//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date d1 = null;
Date d2 = null;
try
{
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
//in milliseconds
long diff = d2.getTime() - d1.getTime();
long diffHours = diff / (60 * 60 * 1000) % 24;
Log.e("test",diffHours + " hours, ");
}
catch (Exception e)
{
// TODO: handle exception
}
Run Code Online (Sandbox Code Playgroud) 我想获取一周的第一个日期.
我的输入将是像2014年7月26日的字符串类型".
我需要获得上述日期(2014年7月26日)的第一周日期.
我需要MM/dd/YYYY格式的输出日期.
基本上我需要输出为07/21/2014.
请给我java程序.我已经做到了这一点
SimpleDateFormat formatter1 = new SimpleDateFormat("MM/dd/yy");
String date ="07/26/2014";
Date Currentdate = formatter1.parse(date);
int currentday=Currentdate.getDay();
Calendar calendar = Calendar.getInstance();
calendar.setTime(Currentdate);
int startDay=currentday-calendar.getFirstDayOfWeek();
Currentdate.setDate(contacteddate.getDate()-startDay);
System.out.println(contacteddate.getDate());
}
Run Code Online (Sandbox Code Playgroud)
上面的代码只给我一个日期..我需要在"MM/dd/YYYY"中的日期和月份和年份请帮助
我试图读取一个代表希腊日期时间的字符串(如"28Μαρτίου2014,14:00")使用SimpleDateFormat,但它会引发java.text.ParseException: Unparseable date: "28 ??????? 2014, 14:00"错误.
这是一个示例代码:
Locale locale = new Locale("el-GR");
SimpleDateFormat formatter = new SimpleDateFormat("dd MMMM yyyy, HH:mm", locale);
try {
sDate = (Date) formatter.parse("28 ??????? 2014, 14:00");
} catch (ParseException ex) {
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我也试过locales el和el_GR,但没有运气.
有什么建议?
我想解析一个时间戳,就像这样 - "2016-03-16 01:14:21.6739".但是当我使用它SimpleDateFormat来解析它时,我发现它输出了一个不正确的解析值.它将隐藏6739毫秒到6秒,剩下739毫秒.它将日期转换为此格式 - Wed Mar 16 01:14:27 PDT 2016.为什么秒部分从21秒变为27秒(增加6秒?).以下是我的代码片段:
final SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS");
String parsedate="2016-03-16 01:14:21.6739";
try {
Date outputdate = sf.parse(parsedate);
String newdate = outputdate.toString(); //==output date is: Wed Mar 16 01:14:27 PDT 2016
System.out.println(newdate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 从文档SimpleDateTimePattern来看,yy应该与YY.
今天是Dec 30, 2019,现在我们得到YY今天是20,yy今天是19。Java Time Patternyy和YYJava Time Pattern之间有什么区别?
java ×10
simpledateformat ×10
date ×3
calendar ×2
time ×2
android ×1
datetime ×1
locale ×1
parse-error ×1
timezone ×1