Java 문자열의 날짜 형식 변경
나나 a i i i iString
날짜를 나타냅니다.
String date_s = "2011-01-18 00:00:00.0";
환하습싶 it it it it로 .Date
은 력합 and합니로 출력합니다.YYYY-MM-DD
맷합니니다다
2011-01-18
어떻게 하면 좋을까요?
좋아요, 제가 아래에 검색한 답을 바탕으로 제가 시도한 것은 다음과 같습니다.
String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));
출력은 ★★★★★★★★★★★★★★★★★★★★」02011-00-1
'''가 '''가 아닌 '''로2011-01-18
가가 뭘못 ?? ???
를 사용하여(또는 문자열에 타임존 부분이 포함되어 있는 경우)String
한 LocalDateTime
.
String oldstring = "2011-01-18 00:00:00.0";
LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
(또는 )을 사용하여 a를 포맷합니다.LocalDateTime
String
일정한 패턴으로.
String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(newstring); // 2011-01-18
또는 Java 8을 아직 사용하지 않은 경우 를 사용하여String
한 Date
.
String oldstring = "2011-01-18 00:00:00.0";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring);
를 포맷하기 위해 사용합니다.Date
String
일정한 패턴으로.
String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(newstring); // 2011-01-18
다음 항목도 참조하십시오.
업데이트: 실패한 시도와 같이 패턴은 대소문자를 구분합니다.각 부품의 약자를 javadoc에서 읽어보십시오.예를 들면M
동안 그리고 몇 달 동안m
ㄴㄴ. 은 네 자리 숫자인 가 있습니다.yyyy
, 5가 5입니다.yyyyy
위에 제가 올린 코드 조각들을 자세히 보세요.
포맷은 대소문자를 구분하므로 mm가 아닌 월에 MM을 사용합니다(이것은 분 단위입니다). yyyy 참조를 위해 다음 치트시트를 사용할 수 있습니다.
G Era designator Text AD
y Year Year 1996; 96
Y Week year Year 2009; 09
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day name in week Text Tuesday; Tue
u Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
예:
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u" 2001-W27-3
답은 물론 SimpleDateFormat 객체를 생성하여 String to Date를 해석하고 Date to Strings를 포맷하는 것입니다.SimpleDateFormat을 시도했지만 작동하지 않으면 코드와 수신할 수 있는 오류를 표시하십시오.
부록: 문자열 형식의 "mm"는 "MM"과 같지 않습니다. MM은 월, mm는 분 단위로 사용하십시오.또한 yyyyy는 yyyy와 같지 않습니다.예:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FormateDate {
public static void main(String[] args) throws ParseException {
String date_s = "2011-01-18 00:00:00.0";
// *** note that it's "yyyy-MM-dd hh:mm:ss" not "yyyy-mm-dd hh:mm:ss"
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = dt.parse(date_s);
// *** same for the format String below
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(dt1.format(date));
}
}
왜 간단하게 이것을 사용하지 않는가?
Date convertToDate(String receivedDate) throws ParseException{
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = formatter.parse(receivedDate);
return date;
}
또, 이것은 다른 방법입니다.
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String requiredDate = df.format(new Date()).toString();
또는
Date requiredDate = df.format(new Date());
「 」의 java.time
(Java 8) :
String date = "2011-01-18 00:00:00.0";
TemporalAccessor temporal = DateTimeFormatter
.ofPattern("yyyy-MM-dd HH:mm:ss.S")
.parse(date); // use parse(date, LocalDateTime::from) to get LocalDateTime
String output = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(temporal);
[BalusC의 수정 내용 포함 편집]SimpleDateFormat 클래스는 다음 작업을 수행합니다.
String pattern = "yyyy-MM-dd HH:mm:ss.S";
SimpleDateFormat format = new SimpleDateFormat(pattern);
try {
Date date = format.parse("2011-01-18 00:00:00.0");
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
"날짜 및 시간 패턴"을 참조하십시오.http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.ParseException;
public class DateConversionExample{
public static void main(String arg[]){
try{
SimpleDateFormat sourceDateFormat = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
Date date = sourceDateFormat.parse("2011-01-18 00:00:00.0");
SimpleDateFormat targetDateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(targetDateFormat.format(date));
}catch(ParseException e){
e.printStackTrace();
}
}
}
다른 답은 정답입니다.기본적으로 패턴에 잘못된 수의 "y"자가 포함되어 있습니다.
시간대
한 가지 문제가 더 있습니다.표준 시간대를 지정하지 않았습니다.UTC를 의도했다면 그렇게 말했어야 합니다.그렇지 않으면 답이 완전하지 않습니다.시간이 없는 날짜 부분만 원하는 경우 문제 없습니다.그러나 시간이 걸릴 수 있는 추가 작업을 수행할 경우 시간대를 지정해야 합니다.
조다 타임
다음은 같은 종류의 코드이지만 서드파티 오픈소스 Joda-Time 2.3 라이브러리를 사용하고 있습니다.
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
String date_s = "2011-01-18 00:00:00.0";
org.joda.time.format.DateTimeFormatter formatter = org.joda.time.format.DateTimeFormat.forPattern( "yyyy-MM-dd' 'HH:mm:ss.SSS" );
// By the way, if your date-time string conformed strictly to ISO 8601 including a 'T' rather than a SPACE ' ', you could
// use a formatter built into Joda-Time rather than specify your own: ISODateTimeFormat.dateHourMinuteSecondFraction().
// Like this:
//org.joda.time.DateTime dateTimeInUTC = org.joda.time.format.ISODateTimeFormat.dateHourMinuteSecondFraction().withZoneUTC().parseDateTime( date_s );
// Assuming the date-time string was meant to be in UTC (no time zone offset).
org.joda.time.DateTime dateTimeInUTC = formatter.withZoneUTC().parseDateTime( date_s );
System.out.println( "dateTimeInUTC: " + dateTimeInUTC );
System.out.println( "dateTimeInUTC (date only): " + org.joda.time.format.ISODateTimeFormat.date().print( dateTimeInUTC ) );
System.out.println( "" ); // blank line.
// Assuming the date-time string was meant to be in Kolkata time zone (formerly known as Calcutta). Offset is +5:30 from UTC (note the half-hour).
org.joda.time.DateTimeZone kolkataTimeZone = org.joda.time.DateTimeZone.forID( "Asia/Kolkata" );
org.joda.time.DateTime dateTimeInKolkata = formatter.withZone( kolkataTimeZone ).parseDateTime( date_s );
System.out.println( "dateTimeInKolkata: " + dateTimeInKolkata );
System.out.println( "dateTimeInKolkata (date only): " + org.joda.time.format.ISODateTimeFormat.date().print( dateTimeInKolkata ) );
// This date-time in Kolkata is a different point in the time line of the Universe than the dateTimeInUTC instance created above. The date is even different.
System.out.println( "dateTimeInKolkata adjusted to UTC: " + dateTimeInKolkata.toDateTime( org.joda.time.DateTimeZone.UTC ) );
실행 시...
dateTimeInUTC: 2011-01-18T00:00:00.000Z
dateTimeInUTC (date only): 2011-01-18
dateTimeInKolkata: 2011-01-18T00:00:00.000+05:30
dateTimeInKolkata (date only): 2011-01-18
dateTimeInKolkata adjusted to UTC: 2011-01-17T18:30:00.000Z
try
{
String date_s = "2011-01-18 00:00:00.0";
SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
Date tempDate=simpledateformat.parse(date_s);
SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("Output date is = "+outputDateFormat.format(tempDate));
} catch (ParseException ex)
{
System.out.println("Parse Exception");
}
다음을 사용할 수 있습니다.
Date yourDate = new Date();
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
String date = DATE_FORMAT.format(yourDate);
완벽하게 작동한다!
public class SystemDateTest {
String stringDate;
public static void main(String[] args) {
SystemDateTest systemDateTest = new SystemDateTest();
// format date into String
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
systemDateTest.setStringDate(simpleDateFormat.format(systemDateTest.getDate()));
System.out.println(systemDateTest.getStringDate());
}
public Date getDate() {
return new Date();
}
public String getStringDate() {
return stringDate;
}
public void setStringDate(String stringDate) {
this.stringDate = stringDate;
}
}
String str = "2000-12-12";
Date dt = null;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
try
{
dt = formatter.parse(str);
}
catch (Exception e)
{
}
JOptionPane.showMessageDialog(null, formatter.format(dt));
서브스트링()을 사용할 수도 있습니다.
String date_s = "2011-01-18 00:00:00.0";
date_s.substring(0,10);
날짜 앞에 공백이 필요한 경우,
String date_s = " 2011-01-18 00:00:00.0";
date_s.substring(1,11);
Java 8을 새로 사용해 볼 수 있습니다.date
자세한 내용은 Oracle 매뉴얼을 참조하십시오.
아니면 예전 것을 시도해 볼 수도 있다.
public static Date getDateFromString(String format, String dateStr) {
DateFormat formatter = new SimpleDateFormat(format);
Date date = null;
try {
date = (Date) formatter.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static String getDate(Date date, String dateFormat) {
DateFormat formatter = new SimpleDateFormat(dateFormat);
return formatter.format(date);
}
private SimpleDateFormat dataFormat = new SimpleDateFormat("dd/MM/yyyy");
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(value instanceof Date) {
value = dataFormat.format(value);
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
};
제공된 형식에서 y를 하나 제거합니다.
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
다음 중 하나여야 합니다.
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");
오늘 날짜는 'JUN 12, 2020' 형식으로 변환할 수 있습니다.
String.valueOf(DateFormat.getDateInstance().format(new Date())));
/**
* Method will take Date in "MMMM, dd yyyy HH:mm:s" format and return time difference like added: 3 min ago
*
* @param date : date in "MMMM, dd yyyy HH:mm:s" format
* @return : time difference
*/
private String getDurationTimeStamp(String date) {
String timeDifference = "";
//date formatter as per the coder need
SimpleDateFormat sdf = new SimpleDateFormat("MMMM, dd yyyy HH:mm:s");
TimeZone timeZone = TimeZone.getTimeZone("EST");
sdf.setTimeZone(timeZone);
Date startDate = null;
try {
startDate = sdf.parse(date);
} catch (ParseException e) {
MyLog.printStack(e);
}
//end date will be the current system time to calculate the lapse time difference
Date endDate = new Date();
//get the time difference in milliseconds
long duration = endDate.getTime() - startDate.getTime();
long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);
long diffInHours = TimeUnit.MILLISECONDS.toHours(duration);
long diffInDays = TimeUnit.MILLISECONDS.toDays(duration);
if (diffInDays >= 365) {
int year = (int) (diffInDays / 365);
timeDifference = year + mContext.getString(R.string.year_ago);
} else if (diffInDays >= 30) {
int month = (int) (diffInDays / 30);
timeDifference = month + mContext.getString(R.string.month_ago);
}
//if days are not enough to create year then get the days
else if (diffInDays >= 1) {
timeDifference = diffInDays + mContext.getString(R.string.day_ago);
}
//if days value<1 then get the hours
else if (diffInHours >= 1) {
timeDifference = diffInHours + mContext.getString(R.string.hour_ago);
}
//if hours value<1 then get the minutes
else if (diffInMinutes >= 1) {
timeDifference = diffInMinutes + mContext.getString(R.string.min_ago);
}
//if minutes value<1 then get the seconds
else if (diffInSeconds >= 1) {
timeDifference = diffInSeconds + mContext.getString(R.string.sec_ago);
} else if (timeDifference.isEmpty()) {
timeDifference = mContext.getString(R.string.now);
}
return mContext.getString(R.string.added) + " " + timeDifference;
}
java.time
java.util
및 그 Date-Time API 。SimpleDateFormat
오래되어 오류가 발생하기 쉽습니다.완전히 사용을 중지하고 최신 Date-Time* API로 전환하는 것이 좋습니다.
또한 조다 타임 홈페이지에서 다음과 같이 공지합니다.
Java SE 8 이후 사용자는 이 프로젝트를 대체하는 JDK의 핵심 부분인 java.time(JSR-310)으로 마이그레이션해야 합니다.
java.time
API , date date Date-Time API:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDate = "2011-01-18 00:00:00.0";
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("u-M-d H:m:s.S", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse(strDate, dtfInput);
// Alternatively, the old way:
// LocalDateTime ldt = dtfInput.parse(strDate, LocalDateTime::from);
LocalDate date = ldt.toLocalDate();
System.out.println(date);
}
}
출력:
2011-01-18
솔루션에 관한 중요한 주의사항:
java.time
할 수parse
★★★★★★★★★★★★★★★★★」format
이전 방식(즉, 호출)에 더해 날짜-시간 유형 자체에서 기능합니다.parse
★★★★★★★★★★★★★★★★★」format
합니다.DateTimeFormatter
의 경우java.time
API입니다.- 최신 Date-Time API는 ISO 8601을 기반으로 하며,
DateTimeFormatter
날짜-시간 문자열이 ISO 8601 표준을 준수할 경우 다음과 같이 명시적으로 개체를 지정합니다.는 아직 하지 않았다.DateTimeFormatter
는 이미 필요한 형식의 문자열을 반환합니다. - 「」를 사용할 수 .
y
u
하지만 난 더 좋아.
Trail: Date Time에서 최신 Date-Time API에 대해 자세히 알아보십시오.
* 어떤 이유로든 Java 6 또는 Java 7을 고수해야 하는 경우 Java 6 및 7에 대한 대부분의 java.time 기능을 백포트하는 ThreeTen 백포트를 사용할 수 있습니다.Android 프로젝트에 종사하고 있으며 Android API 레벨이 여전히 Java-8과 호환되지 않는 경우, 디수깅 및 사용 방법을 통해 사용 가능한 Java 8+ API를 확인하십시오.Android Project의 ABP.
2019-12-20 AM 10:50 AM GMT+6:00를 2019-12-20 AM 10:50 AM으로 변경하고 싶다고 칩시다.첫 번째 날짜 형식은 yyy-MM-d hh:mm a zz이고 두 번째 날짜 형식은 yyy-MM-d hh:mm입니다.
이 함수의 문자열을 반환하기만 하면 됩니다.
public String convertToOnlyDate(String currentDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a ");
Date date;
String dateString = "";
try {
date = dateFormat.parse(currentDate);
System.out.println(date.toString());
dateString = dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return dateString;
}
이 함수는 당신의 욕구 답변을 돌려줍니다.더 많은 항목을 사용자 정의하려면 날짜 형식에서 구성 요소를 추가하거나 제거하십시오.
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd")이 틀렸습니다.
first : 이 되어야 합니다. new SimpleDateFormat("yyyy-mm-dd");
//yyyy 4 이 디스플레이는 5 이 아니지만 2011년 yyyy는 disply
두 번째: 코드를 다음과 같이 변경합니다.new SimpleDateFormat("yyyy-MM-dd");
도움이 되었으면 좋겠다
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");
언급URL : https://stackoverflow.com/questions/4772425/change-date-format-in-a-java-string
'programing' 카테고리의 다른 글
axios(vue.js)에서 다이내믹 인증 헤더를 사용하는 방법 (0) | 2022.07.03 |
---|---|
Array List와 Vector의 차이점은 무엇입니까? (0) | 2022.07.03 |
하위 구성 요소가 어떤 구성 요소에서 호출되는지 어떻게 알 수 있습니까? (0) | 2022.07.03 |
Vuex 작업에 여러 매개 변수 전달 (0) | 2022.07.03 |
nuxt.js 스토어에서 플러그인에 액세스하는 방법 (0) | 2022.07.03 |