ProgramingTip

현재까지 그루비 노드

bestdevel 2020. 11. 14. 10:56
반응형

현재까지 그루비 노드


나는 Groovy로 코딩하고있다

나는 현재 너무 지루한 일을하지 않고 가지고 가지고있는 날짜를 변환하려고 노력하고 있습니다.

String theDate = "28/09/2010 16:02:43";
def newdate = new Date().parse("d/M/yyyy H:m:s", theDate)

다수 :

Tue Aug 10 16:02:43 PST 2010

위의 코드는 잘 작동하지만 이동이 다음과 같이 변경 될 때 :

String testDate = "Tue Aug 10 16:02:43 PST 2010"
def newerdate = new Date().parse("d/M/yyyy H:m:s", testDate)

"화에는 그런 가치가 없다"는 말이 있습니다. 구문 분석에 'E'를 던지려고했지만 날짜를 구문 분석했습니다.

누군가 내가 두 번째 예제를 구문 분석하는 방법을 설명 할 수 있습니까?


parse ()에 대한 첫 번째 인수는 예상 형식입니다. Date.parse("E MMM dd H:m:s z yyyy", testDate)작동 작업으로 변경해야합니다 . (새 데이트를 만들 필요가 얼마나 많은 메서드입니다)

어떤 형식인지 미리 모르는 경우이를위한 특수 파싱 라이브러리를 찾아야합니다. Ruby에는 Chronic 이라는이라는 라이브러리가 제공 될 Groovy에 해당 하는 라이브러리를 알지 못합니다. 편집 : jChronic 이라는 라이브러리의 Java 포트가 있습니다. 확인하고 싶을 수도 있습니다.


이 시도 :

def date = Date.parse("E MMM dd H:m:s z yyyy", dateStr)

날짜 형식을 지정 하는 패턴 은 다음과 같습니다.


JChronic이 최선의 선택입니다. 다음 .fromString()은 던질 수있는 거의 모든 것을 구문 분석 하는 메서드를 Date 클래스에 추가하는 예제입니다 .

Date.metaClass.'static'.fromString = { str ->
    com.mdimension.jchronic.Chronic.parse(str).beginCalendar.time
}

다음과 같이 부를 수 있습니다.

println Date.fromString("Tue Aug 10 16:02:43 PST 2010")
println Date.fromString("july 1, 2012")
println Date.fromString("next tuesday")

a String를으로 "캐스트"하는 Groovy 방법을 검색하면서 Date다음 기사를 보았습니다 . http://www.goodercode.com/wp/intercept-method-calls-groovy-type-conversion/

작성자는 Groovy metaMethods를 사용하여 모든 클래스의 asType메서드 동작을 동적으로 확장 할 수 있습니다. 다음은 웹 사이트의 코드입니다.

class Convert {
    private from
    private to

    private Convert(clazz) { from = clazz }
    static def from(clazz) {
        new Convert(clazz)
    }

    def to(clazz) {
        to = clazz
        return this
    }

    def using(closure) {
        def originalAsType = from.metaClass.getMetaMethod('asType', [] as Class[])
        from.metaClass.asType = { Class clazz ->
            if( clazz == to ) {
                closure.setProperty('value', delegate)
                closure(delegate)
            } else {
                originalAsType.doMethodInvoke(delegate, clazz)
            }
        }
    }
}

ConvertGroovy 변환을 래핑 하는 클래스를 제공 하는 as모든 유형에서 다른 유형으로 사용자 정의 기반 유형 을 추가하는 것이 간단합니다 .

Convert.from( String ).to( Date ).using { new java.text.SimpleDateFormat('MM-dd-yyyy').parse(value) }

def christmas = '12-25-2010' as Date

편리하고 강력한 솔루션이지만 메타 클래스를 다루는 데 따른 장단점과 함정 익숙하지 않은 사람에게는 권장하지 않습니다.


Date#parse더 이상 사용되지 않습니다. 대안은 다음과 가변합니다.

java.text.DateFormat#parse 

따라서 :

 new SimpleDateFormat("E MMM dd H:m:s z yyyy", Locale.ARABIC).parse(testDate)

SimpleDateFormat은 DateFormat의 구현입니다.


이 경우 가장 쉬운 방법 은 Groovy JDK 개선 사항 중 하나 인 parseToStringDate 를 사용 하는 것입니다.

미국 로케일 상수 만 포함하는 EEE MMM dd HH : mm : ss zzz yyyy 패턴과 일치하는 문자열을 구문 분석합니다 (예 : 토요일은 토요일). 이러한 문자열은 Date의 toString 메소드에 의해 생성됩니다.

예:

println (Date.parseToStringDate("Tue Aug 10 16:02:43 PST 2010").format('MM-dd-yyyy'))​

도움이 되었기를 바랍니다.


다음은 개발중인 응용 프로그램 내에서 진행되는 방식입니다.

import java.text.SimpleDateFormat

String newDateAdded = "2018-11-11T09:30:31"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
Date dateAdded = dateFormat.parse(newDateAdded)

println(dateAdded)

출력은 다음과 같습니다.

Sun Nov 11 09:30:31 GMT 2018

귀하의 예에서는 귀하의 필요를 충족시키기 위해 약간 조정할 수 있습니다. 내가 당신이라면 할 것입니다 :

String datePattern = "d/M/yyyy H:m:s"
String theDate = "28/09/2010 16:02:43"
SimpleDateFormat df = new SimpleDateFormat(datePattern)
println df.parse(theDate)

이것이 당신에게 많은 도움이되기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/3817862/groovy-string-to-date

반응형