Java: 문자열을 타임스탬프로 변환
String time TimeStamp 、 String 、 TimeStamp string string string string string string string string 。다음 형식의 날짜를 가진 배열이 있습니다.yyyy-MM-dd
이 형식을 요.yyyy-MM-dd HH:mm:ss.SSS
코드를
final String OLD_FORMAT = "yyyy-MM-dd";
final String NEW_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
String oldDateString = createdArray[k];
String newDateString;
DateFormat formatter = new SimpleDateFormat(OLD_FORMAT);
Date d = formatter.parse(oldDateString);
((SimpleDateFormat) formatter).applyPattern(NEW_FORMAT);
newDateString = formatter.format(d);
System.out.println(newDateString);
Timestamp ts = Timestamp.valueOf(newDateString);
System.out.println(ts);
그리고 다음과 같은 결과를 얻습니다.
2009-10-20 00:00:00.000
2009-10-20 00:00:00.0
제가 간단하게 하려고 할 때론
String text = "2011-10-02 18:48:05.123";
ts = Timestamp.valueOf(text);
System.out.println(ts);
올바른 결과를 얻을 수 있습니다.
2011-10-02 18:48:05.123
내가 뭘 잘못하고 있는 줄 알아?도와 주셔서 감사해요.
올바른 결과를 얻으려면 다음 단계를 수행하십시오.
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
Date parsedDate = dateFormat.parse(yourString);
Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
} catch(Exception e) { //this generic but you can control another types of exception
// look the origin of excption
}
그럼 가 느려질 수 있습니다.
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Util {
public static Timestamp convertStringToTimestamp(String strDate) {
try {
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
// you can change format of date
Date date = formatter.parse(strDate);
Timestamp timeStampDate = new Timestamp(date.getTime());
return timeStampDate;
} catch (ParseException e) {
System.out.println("Exception :" + e);
return null;
}
}
}
하다이 때 2013년 질문을 Timestamp
예를 들어 데이터베이스에 날짜 시간을 저장하는 데 적합한 클래스입니다.오늘 수업은 오래되었다.최신 Java 날짜 및 시각 API는 3년 반 전인 2014년 봄에 Java 8과 함께 출시되었습니다.이치노
자연 방법이 .Timestamp
:
Instant
타임라인상의 포인트입니다.대부분의 경우, 저는 이것을 사용하는 것이 가장 안전하다고 생각합니다. 안Instant
는 타임존과는 무관하며 클라이언트 디바이스와 데이터베이스 서버가 다른 타임존을 실행하고 있는 상황에서도 정상적으로 동작합니다.LocalDateTime
는 2011-10-02 18:48:05.123(질문을 인용)과 같이 시간대가 없는 날짜와 시간입니다.
을 위한 드라이버 4.2 ) 및은 JDBC 4.2 중 합니다.Instant
★★★LocalDateTime
type의 합니다.timestamp
. 이 클래스는 이러한 클래스는 최신 API로 알려져 있습니다.java.time
© JSR-310
이 가장 요.LocalDateTime
그럼 먼저 이 점을 살펴보겠습니다.
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSS");
String text = "2011-10-02 18:48:05.123";
LocalDateTime dateTime = LocalDateTime.parse(text, formatter);
System.out.println(dateTime);
이 인쇄물은
2011-10-02T18:48:05.123
문자열이 yyy-MM-dd 형식일 경우 대신 다음을 수행합니다.
String text = "2009-10-20";
LocalDateTime dateTime = LocalDate.parse(text).atStartOfDay();
System.out.println(dateTime);
이 인쇄물은
2009-10-20T00:00
보다 것은, 는 from from from from from from의 입니다.LocalDate.parse()
합니다.date
.
, 「」로부터 .LocalDateTime
Instant
말합니다
Instant ts = dateTime.atZone(ZoneId.systemDefault()).toInstant();
System.out.println(ts);
JVM의 기본 시간대를 사용하여 변환을 지정했습니다. 오래된 클래스에서 변환이 사용되기 때문입니다.다만, 타임 존의 설정은, 프로그램의 다른 부분이나 같은 JVM으로 실행되고 있는 다른 프로그램에 의해서 변경되는 일이 있기 때문에, 취약합니다.가능한 경우 지역/도시 형식으로 시간대를 지정합니다.다음은 예를 제시하겠습니다.
Instant ts = dateTime.atZone(ZoneId.of("Europe/Athens")).toInstant();
String을 java.sql로 쉽게 변환할 수 있습니다.타임스탬프:
Timestamp t = new Timestamp(DateUtil.provideDateFormat().parse("2019-01-14T12:00:00.000Z").getTime());
Date Util.java:
import java.text.SimpleDateFormat;
import java.util.TimeZone;
public interface DateUtil {
String ISO_DATE_FORMAT_ZERO_OFFSET = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
String UTC_TIMEZONE_NAME = "UTC";
static SimpleDateFormat provideDateFormat() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(ISO_DATE_FORMAT_ZERO_OFFSET);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone(UTC_TIMEZONE_NAME));
return simpleDateFormat;
}
}
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = formatter.parse(dateString);
Timestamp timestamp = new Timestamp(date.getTime());
System.out.println(timestamp);
완전성을 위해 람다와 방법 참조를 포함한 솔루션을 다음에 제시합니다.
ISO 포맷?
설명:다음 방법
- 변환하다
String
패턴에 따라yyyy-MM-dd
에Timestamp
유효한 입력이 입력된 경우, - a를 반환하다
null
, 만약null
값이 지정됩니다. - 던지다
DateTimeParseException
비활성 입력이 입력된 경우
코드:
static Timestamp convertStringToTimestamp(String strDate) {
return Optional.ofNullable(strDate) // wrap the String into an Optional
.map(str -> LocalDate.parse(str).atStartOfDay()) // convert into a LocalDate and fix the hour:minute:sec to 00:00:00
.map(Timestamp::valueOf) // convert to Timestamp
.orElse(null); // if no value is present, return null
}
검증:이 방법은 다음 유닛 테스트로 테스트할 수 있습니다(Junit5 및 Hamcrest 사용).
@Test
void convertStringToTimestamp_shouldReturnTimestamp_whenValidInput() {
// given
String strDate = "2020-01-30";
// when
final Timestamp result = convertStringToTimestamp(strDate);
// then
final LocalDateTime dateTime = LocalDateTime.ofInstant(result.toInstant(), ZoneId.systemDefault());
assertThat(dateTime.getYear(), is(2020));
assertThat(dateTime.getMonthValue(), is(1));
assertThat(dateTime.getDayOfMonth(), is(30));
}
@Test
void convertStringToTimestamp_shouldReturnTimestamp_whenInvalidInput() {
// given
String strDate = "7770-91-30";
// when, then
assertThrows(DateTimeParseException.class, () -> convertStringToTimestamp(strDate));
}
@Test
void convertStringToTimestamp_shouldReturnTimestamp_whenNullInput() {
// when
final Timestamp result = convertStringToTimestamp(null);
// then
assertThat(result, is(nullValue()));
}
다른 포맷?
통상은, 해석하는 문자열에는 다른 형식이 붙어 있습니다.이 문제를 해결하는 방법은 포맷터를 사용하여 다른 포맷으로 변환하는 것입니다.다음은 예를 제시하겠습니다.
입력:20200130 11:30
패턴:yyyyMMdd HH:mm
출력: 이 입력의 타임스탬프
코드:
static Timestamp convertStringToTimestamp(String strDate) {
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm");
return Optional.ofNullable(strDate) //
.map(str -> LocalDateTime.parse(str, formatter))
.map(Timestamp::valueOf) //
.orElse(null);
}
테스트:
@Test
void convertStringToTimestamp_shouldReturnTimestamp_whenValidInput() {
// given
String strDate = "20200130 11:30";
// when
final Timestamp result = convertStringToTimestamp(strDate);
// then
final LocalDateTime dateTime = LocalDateTime.ofInstant(result.toInstant(), ZoneId.systemDefault());
assertThat(dateTime.getYear(), is(2020));
assertThat(dateTime.getMonthValue(), is(1));
assertThat(dateTime.getDayOfMonth(), is(30));
assertThat(dateTime.getHour(), is(11));
assertThat(dateTime.getMinute(), is(30));
}
DateFormat formatter;
formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = (Date) formatter.parse(str_date);
java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
제가 한 일은 다음과 같습니다.
Timestamp timestamp = Timestamp.valueOf(stringValue);
어디에stringValue
에는 임의의 형식의 날짜/시간을 지정할 수 있습니다.
먼저 날짜 문자열을 로 변환합니다.date
다음으로 변환합니다.timestamp
다음 일련의 행을 사용하여
Date date=new Date();
Timestamp timestamp = new Timestamp(date.getTime());//instead of date put your converted date
Timestamp myTimeStamp= timestamp;
그 해결책은 oldDateString이 "2009-10-20"과 같은 것이라고 확신합니다.분명히 여기에는 일 미만의 시간 데이터가 포함되어 있지 않습니다.이 문자열을 새로운 포맷터로 포맷할 경우 분, 초, 밀리초를 어디서 얻을 수 있습니까?
따라서 결과는 완전히 정확합니다: 2009-10-20 00:00:00.000
이 문제를 해결하려면 첫 번째 포맷 전에 원래 타임스탬프(시간 데이터 포함)가 필요합니다.
한 번 시도해 볼 수 있어?
String dob="your date String";
String dobis=null;
final DateFormat df = new SimpleDateFormat("yyyy-MMM-dd");
final Calendar c = Calendar.getInstance();
try {
if(dob!=null && !dob.isEmpty() && dob != "")
{
c.setTime(df.parse(dob));
int month=c.get(Calendar.MONTH);
month=month+1;
dobis=c.get(Calendar.YEAR)+"-"+month+"-"+c.get(Calendar.DAY_OF_MONTH);
}
}
언급URL : https://stackoverflow.com/questions/18915075/java-convert-string-to-timestamp
'sourcecode' 카테고리의 다른 글
SimpleDateFormat 및 로케일 기반 형식 문자열 (0) | 2022.09.03 |
---|---|
타입 세이프한 범용 데이터 구조 C? (0) | 2022.09.03 |
안드로이드:XML을 사용하여 전환 단추에 대해 두 개의 다른 이미지 지정 (0) | 2022.09.03 |
Vue/Nuxt 비동기 메타 태그 생성 (0) | 2022.09.03 |
express 및 vue js를 사용하여 로그인 성공 후 특정 페이지로 리디렉션하는 방법 (0) | 2022.09.03 |