2010-11-17 16 views
8

में दिनांक समय मैं डेटाटाइम में 1 सेकंड जोड़ना चाहता हूं, इसलिए मैं दिनांक आधारित अंकन का परीक्षण कर सकता हूं। मुझे उम्मीद है कि हमारी एपीआई प्रतिक्रिया से एक तिथि प्राप्त करें, दिनांक स्ट्रिंग को किसी तारीख में रूपांतरित करें, फिर इसे मिलीसेकंड में परिवर्तित करें, एक सेकंड जोड़ें और फिर डेटास्टिंग में वापस कनवर्ट करें और इसे मेरे अगले API अनुरोध में उपयोग करें। (ध्वनि लंबे समय से चल रहा है? यह निश्चित रूप से ऐसा लगता है!)ग्रोवी

जब मैं डेटटाइम को पार्स करने का प्रयास करता हूं तो मुझे समस्या होती है और समस्या होती है।

def c= new date().parse("yyyy-mm-ddThh:mm:ss",lastDate) 
log.info "new formatt"+lastDate 
log.info c.timeInMillis 

त्रुटि:: groovy.lang.MissingMethodException: विधि का कोई हस्ताक्षर नहीं: java.util.Date.parse() तर्क प्रकार के लिए लागू होता है: (java.lang.String निम्नलिखित कोड एक त्रुटि फेंक रहा है , groovy.util.slurpersupport.NodeChildren) मान: [yyyy-mm-ddThh: mm: ss, 2007-01-26T00: 00: 00] संभावित समाधान: पार्स (java.lang.String), पार्स (java.lang। स्ट्रिंग, java.lang.String), प्रतीक्षा करें(), क्लोन(), कोई भी(), उपयोग (java.util.List, groovy.lang.Closure)

मेरे लक्ष्य को प्राप्त करने के तरीके पर कोई सुझाव? या यह एक मंद दृष्टिकोण है?

उत्तर

9

शायद सबसे consise, निर्भरता के बिना मुहावरेदार ग्रूवी समाधान:

Date.parse("yyyy-MM-dd'T'HH:mm:ss", text).with { new Date(time + 1000) } 
+0

वाह, अच्छा और संक्षिप्त। मैं इसे एक शॉट दूंगा और देख सकता हूं कि यह फिट बैठता है या नहीं। धन्यवाद! –

0

यहाँ एक नज़र डालें: देखो

def c = Calendar.instance 
c.add(Calendar.SECOND, 1) 

आप एक तारीख आप चाहते हैं के साथ c प्रारंभ करने की आवश्यकता,:

आप की तरह कुछ का उपयोग करना चाहते विभिन्न संभावनाओं पर लिंक, लेकिन यहां एक उदाहरण है:

c = new GregorianCalendar(2009, Calendar.JULY, 22, 2, 35, 21) 
14

एक सेकंड जोड़ने के तरीके के बारे में काफी गोल की तरह लगता है। क्यों नहीं:

import groovy.time.TimeCategory 

def lastDate = new Date() 

use(TimeCategory) { 
    lastDate = lastDate + 1.second 
} 

अधिक लचीली तारीख स्ट्रिंग पार्सिंग के लिए, आप जेच्रोनिक जावा लाइब्रेरी को देखना चाहेंगे। यह कई अलग-अलग प्रारूपों में तिथियों को संभाल सकता है और SimpleDateFormat क्लास जैसे सटीक टेम्पलेट पर भरोसा नहीं करता है। यहाँ इन दोनों का उपयोग कर एक उदाहरण है:

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

def lastDate = Date.fromString("2007-01-26T00:00:00") 

use (TimeCategory) { 
    100.times { 
     runTest(lastDate) 
     lastDate = lastDate + 1.second 
    } 
} 
2

एक अधिक सामान्य जावा समाधान Joda Time पुस्तकालय का प्रयोग है।

// 
// Dependencies 
// ============ 
import org.joda.time.* 
import org.joda.time.format.* 

@Grapes([ 
    @Grab(group='joda-time', module='joda-time', version='1.6.2') 
]) 

// 
// Main program 
// ============  
DateTimeFormatter psr = ISODateTimeFormat.dateTimeParser() 
DateTimeFormatter fmt = ISODateTimeFormat.dateHourMinuteSecond() 

DateTime inDate = psr.parseDateTime("2010-11-18T23:23:59") 

println fmt.print(inDate.plusSeconds(1)) 

यह तिथि स्ट्रिंग का समय-क्षेत्र, जैसे के साथ जटिल स्थितियों सहित किसी भी इनकमिंग और आउटगोइंग दिनांक प्रारूपण, संभाल कर सकते हैं "2010-11-18T23: 23: 59 + 01: 00"

1

एक सहयोगी की मदद की निम्नलिखित के साथ - प्रकार एक साथ अच्छी तरह से नहीं खेल रहे थे -

--import groovy.time.TimeCategory) 

def aDate = lastDate.toString() 
def newdate = Date.parse("yyyy-MM-dd'T'HH:mm:ss",aDate) 
use(TimeCategory){ 
newdate = newdate+1.second 
} 

मैं कठिनाई शुरू में समय जोड़ने का एक सा था।

आपके प्रतिक्रिया लोगों के लिए धन्यवाद!